从用户那里获取输入时遇到问题。我使用scanf函数从用户获取输入,我认为这是问题的原因。
我希望这两个提示是分开的。
下面的代码是一个简单的问题示例:

#include <stdio.h>
int main(void)
{
    char name[20];
    int age = 0;
    int index;

    printf("1- Insert a new student.\n");
    printf("2- Delete a student.\n");
    printf("3- Show all students.\n");
    printf("4- Exit.\n\nChoose: ");
    scanf("%d", &index);

    printf("Enter your name: ");
    scanf("%20[^\n]s", name);
    //fgets(name, 20, stdin); // <--- Does the same thing.

    printf("Enter your age: ");
    scanf("%d", &age);

    printf("Name: %s, Age: %d\n", name, age);
    return 0;
}

结果为文本:
1- Insert a new student.
2- Delete a student.
3- Show all students.
4- Exit.

Choose: 2
Enter your name: Enter your age:

图像:
c - 为什么该程序中的两个提示接收输入显示在同一行?-LMLPHP
为什么两个提示显示在同一行?

最佳答案

我建议你改一下:

scanf("%20[^\n]s", name);

对此:
scanf(" %19[^\n]", name);

出于这些原因:
指定为scanf的缓冲区大小不包括最终的NUL终止符(与fgets不同)。
前一个scanf在输入缓冲区中留下了一个新行,格式说明符%[]%c不会自动过滤它(与%d和其他说明符不同)。添加空格告诉scanf过滤它。
最后的s不是格式%[]的一部分,但是使用过%s的编码人员经常犯错误。
还需要注意的是,带有scanf%[]并不等同于fgets(),后者读取任何最后的换行符并将其放在提供的缓冲区中。

10-06 08:59
查看更多