使用fscanf()在C中进行加法和减法

使用fscanf()在C中进行加法和减法,c,function,loops,C,Function,Loops,我有一个长度为m的n行文本文件(从长远来看并不重要)。在每一行中,都有这样一个顺序: 1 + 2 + 5 - 3 = 我正在使用fscanf函数捕获所有数字和运算符并计算它,当“=”运算符发现它时,它会打印到另一个文件中。我正在使用一个循环。我的问题是C如何识别数字和运算符?我知道运算符是%c类型,数字是%d类型,但我的程序如何正常工作,以及为什么不将它们作为示例5作为字符: #include <stdio.h> #include <stdlib.h> int mai

我有一个长度为m的n行文本文件(从长远来看并不重要)。在每一行中,都有这样一个顺序:

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;
}
#包括
#包括
int main()
{
文件*填充;
文件*输出文件;
整数=0;
int结果=0;
字符算子;
int foundEqualsOp=0;
infle=fopen(“dane.txt”,“r”);
OutFile=fopen(“wynik.txt”,“w”);
while(fscanf(填充、%d、&result)!=EOF)
{
数字=0;
foundEqualsOp=0;
而(!foundEqualsOP){
fscanf(填充、%c、&运算符);
如果(运算符=='='='){
foundEqualsOp=1;
fprintf(输出文件“%d\n”,结果);
}
else if(运算符=='-'){
fscanf(填充、%d、&number);
结果=结果编号;
}
else if(运算符=='+'){
fscanf(填充、%d、&number);
结果=结果+数字;
}
}
}
fclose(infle);
fclose(输出文件);
返回0;
}

假设您的输入文件包含以下内容,如示例所示:

1 + 2 + 5 - 3 = 
外部
scanf
%d
读取。这将拾取
1
作为整数值1,并将其放入
result

现在,内部的
scanf
使用
%c
运行。它读取
1
之后的空格,因此如果输入
块,则不会输入任何
,内部循环将再次运行。内部
scanf
再次读取
%c
并读取
+
字符。这将导致在调用
scanf
使用
%d
的位置输入
if(operator='+')
块。此格式说明符跳过
+
后面的空格,将
2
读取为整数值2,并将其添加到
结果中

上述情况再次发生,读取
2
之后的空格、后面的
+
以及后面的空格和
5
。对于下面的空格,
-
,空格和
3


之后,内部循环中的
scanf
读取
3
之后的空格,但不执行任何操作,然后在下一次迭代中读取
=
,然后打印结果并设置退出内部循环的标志。

不要在此处张贴屏幕截图,更喜欢粘贴格式正确的代码,看,每次有人在这个网站上发布代码的图片,都会有一只小猫死去。不要杀小猫。复制、粘贴并正确设置演示文稿代码的格式/缩进。请将代码和数据添加为文本(),而不是图像。图片:A)不允许我们复制和粘贴代码/错误/数据进行测试;B) 不允许基于代码/错误/数据内容进行搜索;和。如果图像添加了一些仅由文本代码/错误/数据无法传达的重要信息,则除了代码格式的文本外,还应使用图像。制作一个屏幕副本、修剪它并粘贴图像真的比将代码复制/粘贴为文本更容易吗?C不识别任何东西。你的代码可以做到,或者至少应该做到。