使用这个C程序,当我按此顺序执行时,此程序不要求CHOICE为INPUT但是如果我选择请求选择输入正在工作但是然后整数输入没有输入值,那么我输入Integer Input(inputNum)语句
int main()
{ int inputNum; char choice='A';
printf("Please enter number : ");
scanf("%d",&inputNum);
printf("\nEnter (N/n) to STOP ADDING : ");
scanf("%c",&choice);
printf("\nChoice is : %c\n",choice);
return 0;
}
答案 0 :(得分:2)
这是发生了什么。
printf("Please enter number : ");
scanf("%d",&inputNum);
当它运行时,系统会提示您输入一个数字,当然您点击返回以刷新输入缓冲区。这留下了\n
(换行符)字符,可以通过以下方式读取:
printf("\nEnter (N/n) to STOP ADDING : ");
scanf("%c",&choice);
因此,该计划进入Choice is :
并留下一个空白行 - 即\n
已放入choice
。
一种解决方案是使用;
scanf("%*c%c", &choice);
*
告诉scanf()
放弃字段,在这种情况下,是上次输入中剩余的换行符。
如果我在选择请求选择输入正在工作之后输入Integer Input(inputNum)语句
值得注意的是,换行问题不会影响%d
次扫描,因为这些会跳过前导空格。因此,如果您在程序中请求两个整数而不是int和char,则无需手动跳过换行符即可。相同的逻辑适用于大多数类型的输入,根据ISO {99标准草案标准在POSIX man page for fscanf中重复的声明:
输入空白字符(由isspace指定)应为 跳过,除非转换规范包括[,c,C或n 转换说明符。
那"除非"当然适用于%c
。
答案 1 :(得分:0)
返回字符(按下以验证您的第一个输入)仍然存在于标准输入缓冲区中。
您可以在第一个getchar();
之后添加scant
来解决您的问题,因为它会占用缓冲区的迷路\n
,并为下一次输入留空。