我有一个文本文件,其中有 n 行,长度为 m(从长远来看这并不重要)。每行都有一个这样的序列:
1 + 2 + 5 - 3 =
我正在使用 fscanf
函数来捕获所有数字和运算符并计算它,当“=”运算符发现它时,它会打印到不同的文件中。我正在使用循环。我的问题是C如何识别数字和运算符?我知道运算符是 %c
类型,数字是 %d
类型,但是我的程序如何正常工作以及为什么不以它们为例5 作为一个字符:
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *InFile;
FILE *OutFile;
int number=0;
int result=0;
char operator;
int foundEqualsOp=0;
InFile = fopen("dane.txt","r");
OutFile = fopen("wynik.txt","w");
while(fscanf(InFile,"%d",&result)!=EOF)
{
number = 0;
foundEqualsOp = 0;
while(!foundEqualsOP){
fscanf(InFile,"%c",&operator);
if(operator == '='){
foundEqualsOp = 1;
fprintf(OutFile,"%d\n",result);
}
else if(operator == '-'){
fscanf(InFile,"%d",&number);
result = result-number;
}
else if (operator == '+'){
fscanf(InFile,"%d",&number);
result = result + number;
}
}
}
fclose(InFile);
fclose(OutFile);
return 0;
}
最佳答案
假设您的输入文件包含以下内容,如示例所示:
1 + 2 + 5 - 3 =
外部scanf
读取为%d
。这会选择 1
作为整数值 1 并将其放入 result
中。
现在内部 scanf
与 %c
一起运行。它读取 1
之后的空格,因此不会输入任何 if
block ,并且内部循环会再次运行。内部 scanf
再次读取 %c
并读取 +
字符。这会导致在调用 scanf
使用 %d
时输入 if (operator == '+')
block 。此格式说明符会跳过 +
后面的空格,并将 2
读取为整数值 2,并将其添加到 结果
。
上面的情况再次发生,读取 2
之后的空格、后面的 +
以及后面的空格和 5
。再次输入以下空格、-
、空格和 3
。
之后,内循环中的 scanf
读取 3
之后的空格并且不执行任何操作,然后在下一次迭代时读取 =
之后打印结果并设置标志退出内循环。,
关于c - 使用 fscanf() 在 C 中进行加法和减法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59735510/