如何解决C:当要求用户提供2个输入时,第二个问题将不会提示输入要存储在变量中
如果我一次尝试成绩或全名,我会得到预期的结果
"Enter your Grade: "
"Your grade is x"
"Enter your full name:"
"Your full name is xxxx xxxx"
如果我在打印输出下面运行
Enter your Grade:2
Your grade is 2
Enter your full name: Your full name is
我不知道为什么没有提示我进行第二次输入,特别是因为我知道在单独尝试时它可以工作* /
int main()
{
char grade;
printf("Enter your Grade: ");
scanf("%c",&grade);
printf("Your grade is %c \n",grade);
char fullName[20];
printf("Enter your full name: ");
fgets(fullName,20,stdin); /*2nd argument specify limits of inputs*,3rd means standard input ie command console */
printf("Your full name is %s \n",fullName);
return 0;
}
解决方法
请勿将scanf()
与fgets()
混合-在这种情况下,缓冲区中存在的,由scanf()
保持不变的换行符将被馈送到fget()
并赢得“ t”询问任何新输入。
最好在所有用户输入中使用fgets()
。
scanf("%c");
缓冲区问题,%c
将只吃一个字符,因此
或\n
将保留在缓冲区中以便下一个字符读取。
尝试一下
#include <stdio.h>
#include <stdlib.h>
int main()
{
char grade;
printf("Enter your Grade: ");
scanf("%c",&grade);
getchar(); // here
printf("Your grade is %c \n",grade);
char fullName[20];
printf("Enter your full name: ");
fgets(fullName,20,stdin); /*2nd argument specify limits of inputs*,3rd means standard input ie command console */
printf("Your full name is %s \n",fullName);
return 0;
}
使用getchar();
在缓冲区中占用多余的字符。
问题出在此行scanf("%c",&grade);
上,每次使用scanf()
时,请切记enter
键将存储在缓冲区中。由于enter
键位于缓冲区中,因此在执行fullName
时它会直接进入fgets(fullName,stdin);
。这样就可以得到输出:
Enter your Grade:2
Your grade is 2
Enter your full name: Your full name is
您可以通过在getchar();
之后立即使用getch();
或scanf();
来捕获Enter
键,并确保fullName
获得正确的输入来解决问题。解决该问题的另一种方法是使用fflush(stdin);
。它们基本上执行相同的操作,但是fflush(stdin);
从缓冲区中清除了Enter
键。因此,应在fflush(stdin);
之后使用scanf();
清除Enter
scanf();
键
这是一个很长的过程,需要很多帮助,但我希望此信息对您有帮助:)))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。