gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 21:44:19 27 4
gpt4 key购买 nike

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com