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

这是一篇很长的文章,需要吸收的内容很多,但我希望这些信息对您有所帮助:)))