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

标签 c function loops

我有一个文本文件,其中有 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/

相关文章:

function - 表达式与函数之间的差异

即使 while 为真,Javascript do while 循环也不会继续

python - 你能覆盖python中的循环名称吗

c - 宏存储在哪里?

c - 理解 c 中一个棘手的 for 循环

javascript - 创建包含 HTML 的函数

JavaScript:完全旋转一个字符串,然后在给定数字输入的另​​一个方向上旋转该字符串

c++ - 将安慰专有的二进制消息获取到 sscanf 中

c - 如何根据目录自动保存 "history"

c++ - 在 Str 中转换为 Lower 和 Hold - C++