gpt4 book ai didi

c - scanf 不读取输入

转载 作者:太空宇宙 更新时间:2023-11-04 03:05:49 25 4
gpt4 key购买 nike

我阅读了更多关于 scanf 的帖子,我发现了一些答案,但没有人帮助我:

while(!comanda){
int tmp;
if (scanf("%d", &tmp) == 0)
getchar();
else{
comanda = tmp;
fprintf(stdout,"%d",&comanda);
fflush(stdout);}
}
}

问题是执行这行代码后,什么也没有发生。在此之后,我检查了不执行的“comanda”。

最佳答案

scanf 和所有格式化输入函数 的一个问题是终端倾向于在 line mode or cooked mode 中运行。并且 API 是为原始模式设计的。换句话说,scanf 实现通常不会返回,直到遇到换行符。输入被缓冲,以后对 scanf 的调用将使用缓冲的行。考虑以下简单程序:

#include <stdio.h>

int main() {
int a_number;
printf("Enter a number: ");
fflush(stdout);
while (scanf("%d", &a_number) != EOF) {
printf("you entered %d\n", a_number);
printf("Enter another number: ");
fflush(stdout);
}
return 0;
}

您可以在按return 之前输入多个数字。这是运行该程序的示例。

bash$ gcc foo.c
bash$ ./a.out
Enter a number: 1 2 3 4 5 6 7 8 9 10<Return>
you entered 1
Enter another number: you entered 2
Enter another number: you entered 3
Enter another number: you entered 4
Enter another number: you entered 5
Enter another number: you entered 6
Enter another number: you entered 7
Enter another number: you entered 8
Enter another number: you entered 9
Enter another number: you entered 10
Enter another number: <Ctrl+D>bash$
bash$

每次调用 scanf 都会从输入流中读取一个数字,但直到我按下 return 后第一次调用才返回。其余调用立即返回而不会阻塞更多输入,因为输入流已缓冲并且它可以从流中读取另一个整数。

替代方案是使用fgets 一次处理整行数据或使用the terminal interface。禁用 "canonical input processing" .大多数人使用 fgets,因为 POSIX 的终端接口(interface)部分未在 Windows 下实现。

关于c - scanf 不读取输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5289542/

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