c - 为什么这个程序中接收输入的两个提示显示在同一行?

标签 c gcc input

我在获取用户输入时遇到问题。我使用 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: 

图片:

为什么两个提示显示在同一行?

最佳答案

正如其他评论所建议的那样,您最好使用 %19[^\n]。但是,这样做仍然会导致您的问题。这应该有效:

#include <stdio.h>

int main(void) {

int age = 0;
int index;
char name[20];

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(" %19[^\n]", name);


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

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

注意 scanf 函数中添加的前导空格。前导空格用于消耗标准输入中可能由先前用户输入留下的任何尾随字符。

Program output
 clang-7 -pthread -lm -o main main.c
 ./main
1- Insert a new student.
2- Delete a student.
3- Show all students.
4- Exit.

Choose: 1
Enter your name: jimm
Enter your age: 12
Name: jimm, Age: 12

希望对您有所帮助!

关于c - 为什么这个程序中接收输入的两个提示显示在同一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58272221/

相关文章:

javascript输入另一个程序要求的密码

Angular2 @Input 和生命周期钩子(Hook)

Python tryexcept 用于用 "-"进行分割

将所有数组元素复制到 C 中的另一个数组中

c - 如何显示存储在数组中的所有值以及如何将这些值传递给第二个函数 {C}

c++ - 使用 C++ 标准库在 Linux 上编译

c++ - 如何在命令窗口的一个地方写一个变量并在同一个地方更新它的值?

c++ - 这段代码的瓶颈在哪里?

在我的 c 代码中找不到错误

c - 与将 .c 文件转换为 .o 文件并链接和汇编相比,编译 gcc .c 文件有什么区别?