【问题标题】:C auto enter for user input [duplicate]C自动输入用户输入[重复]
【发布时间】:2021-08-28 06:13:20
【问题描述】:

我是 C 新手,正在学习如何获取用户输入。下面是我的代码和执行打印输出。为什么char 输入会自动输入,我输入年龄输入(即 10)并按 ENTER?如果我把成绩输入放在年龄输入之前就不会有这个问题了。

代码

//get user variable
    int age;
    printf("Enter your age: ");
    scanf("%d", &age);
    printf("You are %d years old \n", age);

    char grade;
    printf("Enter your grade: ");
    scanf("%c", &grade);
    printf("You grade is %c \n", grade);

    double gpa;
    printf("Enter your gpa: ");
    scanf("%lf", &gpa);
    printf("You gpa is %f \n", gpa);

    double name[5];
    printf("Enter your name: ");
    scanf("%s", name);
    printf("You name is %s \n", name);

控制台打印输出

Enter your age: 10
You are 10 years old
Enter your grade: You grade is

Enter your gpa: 2.5
You gpa is 2.500000
Enter your name: ofbgeowfgboe
You name is ofbgeowfgboe

【问题讨论】:

  • scanf("%c", &grade); -> scanf(" %c", &grade);。此外,您应该fflush(stdout) 确保不以换行符结尾的printf 调用在预期时间出现在输出中。
  • "学习如何获取用户输入" - 第一课:检查调用的函数是否指示成功。 TL;博士; if(scanf(...) == the_expected_number_of_read_values) { /* success */ } else { /* fail */ }
  • 值得注意的是:double name[5];scanf("%s", name); 是完全错误的。您可能需要char name[5]; scanf("%4s", name);(允许名称最多包含 4 个字符)。

标签: c


【解决方案1】:

您可以在每次致电scanf() 后添加getchar()为什么? scanf() 留在 stdin 缓冲区中的任何 \n 中(即,当您按 Enter 时)。

我建议您使用fgets()sscanf() insted。更安全。

【讨论】:

    猜你喜欢
    • 2021-07-24
    • 1970-01-01
    • 2015-01-26
    • 1970-01-01
    • 2014-06-26
    • 2013-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多