gpt4 book ai didi

c - 为什么以及如何知道 scanf ("%c") 何时在内存中存储额外的数据? [C]

转载 作者:行者123 更新时间:2023-11-30 15:05:21 25 4
gpt4 key购买 nike

我编写了一个简单的程序来进行前缀表示法的基本操作(运算符operand1 operand2):

#include <stdio.h>
#include <stdlib.h>

#define MAX 5
float operando(char s[], float precedente);
float operazione(float o1, float o2, char operatore);

int main(void)
{
char operatore;
char operando1[MAX], operando2[MAX];
float precedente = 0;
float o1, o2;

printf("Scrivi l'operazione con questo formato: operatore operando1 operando2;\nPREV al posto di uno dei due operandi per usare l'ultimo risultato.\nLettera qualunque per terminare\n");
do
{
scanf("%c %s %s", &operatore, operando1, operando2);
o1 = operando(operando1, precedente);
o2 = operando(operando2, precedente);
precedente = operazione(o1, o2, operatore);
printf("%c %f %f = %f\n\n", operatore, o1, o2, precedente);
scanf("%*c");
} while(operatore == '+' || operatore == '-' || operatore == '*' || operatore == '/');

return 0;
}

float operando(char s[], float precedente)
{
if (strcmp(s, "PREV") == 0)
return precedente;
else
return atof(s);
}

float operazione(float o1, float o2, char operatore)
{
switch (operatore)
{
case '+':
return o1 + o2;
break;
case '-':
return o1 - o2;
break;
case '*':
return o1*o2;
break;
case '/':
return o1 / o2;
break;
}
}

如果我运行这个程序,它仅在第一次运行,然后它将'\n'作为字符并将其放入运算符变量中。所以我在最后一个 printf 之后添加了一行简单的代码: scanf("%*c");

有了这行代码,程序就可以正常工作了。我不明白:为什么不丢弃 '\n' 它不使用最后读取的字符?在运行程序之前,我如何知道何时丢弃字符?

最佳答案

scanf%c 格式说明符将准备任何字符,包括空格或换行符等空白字符。您需要在 %c 之前添加一个空格,它将吸收所有空白字符:

scanf(" %c %s %s", &operatore, operando1, operando2);

关于c - 为什么以及如何知道 scanf ("%c") 何时在内存中存储额外的数据? [C],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39922741/

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