C:当要求用户提供 2 个输入时,第二个问题不会提示将输入存储在变量中
C : when asking for 2 inputs from a user the 2nd question will not prompt an input to be stored in a variable
如果我一次尝试一个等级或全名,我会得到预期的结果
"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()
并且它不会“询问”任何新的输入。
最好在所有 user-inputs 中使用 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
密钥在您的缓冲区中,因此在执行 fgets(fullName, 20, stdin);
时它会直接进入 fullName
。这就是您获得输出的方式:
Enter your Grade:2
Your grade is 2
Enter your full name: Your full name is
您可以通过在scanf();
之后使用getchar();
或getch();
来解决问题,以捕获Enter
键并确保fullName
得到正确的输入。另一种解决方法是使用fflush(stdin);
。他们基本上做同样的事情,但是 fflush(stdin);
从缓冲区中清除 Enter
键。因此,fflush(stdin);
应该在scanf();
之后使用,以清除scanf();
留下的不需要的Enter
键
这是一篇很长的文章,需要吸收的内容很多,但我希望这些信息对您有所帮助:)))
如果我一次尝试一个等级或全名,我会得到预期的结果
"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()
并且它不会“询问”任何新的输入。
最好在所有 user-inputs 中使用 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
密钥在您的缓冲区中,因此在执行 fgets(fullName, 20, stdin);
时它会直接进入 fullName
。这就是您获得输出的方式:
Enter your Grade:2
Your grade is 2
Enter your full name: Your full name is
您可以通过在scanf();
之后使用getchar();
或getch();
来解决问题,以捕获Enter
键并确保fullName
得到正确的输入。另一种解决方法是使用fflush(stdin);
。他们基本上做同样的事情,但是 fflush(stdin);
从缓冲区中清除 Enter
键。因此,fflush(stdin);
应该在scanf();
之后使用,以清除scanf();
Enter
键
这是一篇很长的文章,需要吸收的内容很多,但我希望这些信息对您有所帮助:)))