【发布时间】:2021-12-09 19:44:18
【问题描述】:
我很困惑 scanf 如何与 getchar 一起工作。我假设 scanf 可以获取用户输入,然后当用户按下输入时,它会分别分配输入。同时,getchar 通过获取每个字符并将其分配给分配给 getchar 的变量来工作。查看这段代码:
#include <stdio.h>
int main (){
int num, i;
char ch;
printf("Enter an expression: ");
scanf("%d", &i);
while ((ch = getchar()) != '\n'){
if (ch == '+'){
scanf("%d", &num);
i += num;
break;
}
}
printf("%d", i);
}
我不应该输入 3 次吗?第一个scanf,然后是getchar,然后是最后一个scanf,还是我在这里遗漏了一些关键?我是 C 新手,希望你不要介意我的这个(可能是愚蠢的)问题 :)
【问题讨论】:
-
关键是了解
scanf()如何处理格式字符串和输入流中的空格,这随格式说明符的不同而不同。基线是不混合不同的输入函数:如果你必须这样做来混淆scanf()`的工作方式,那么首先不要使用scanf()。 -
scanf系列非常适合解析简单的输入。一旦它不简单,人们就应该远离scanf,而不是相信这是“方式”,因为他们被教导了什么。将scanf用于表达式听起来正是这个问题。使用词法分析器和解析器生成器来处理更复杂的语法。