c - gets() 在 while 循环中只接受一次输入

标签 c gets

我是 C 的新手,正在完成一些练习,但在 while 循环中使用 gets() 时遇到问题。在搜索中,我认为它可能与\n 字符有关,但我希望有人能够对这里发生的事情进行更彻底的解释:

这个循环只会运行一次——它会第二次将“输入姓氏”打印到屏幕上,然后在 gets() 有机会第二次接受任何输入之前退出循环:

while (employee_num <= 10)
{
    printf("Enter last name ");
    gets(employee[employee_num].last_name);
    if(strlen(employee[employee_num].last_name) == 0)
        break;
    printf("Enter first name ");
    gets(employee[employee_num].first_name);
    printf("Enter title ");
    gets(employee[employee_num].title);
    printf("Enter salary ");
    scanf("%d", &employee[employee_num].salary);        
    ++employee_num;
}

提前致谢!

最佳答案

读取薪水后,输入缓冲区中会有一个换行符 (\n)。这是在第二次迭代中被选为姓氏的。您可以通过在最后一次 scanf 之后添加 getchar() 来忽略它:

while (employee_num <= 10) {
    ...
    printf("Enter salary ");
    scanf("%d", &employee[employee_num].salary);        
    ++employee_num;
    getchar();
}

关于c - gets() 在 while 循环中只接受一次输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14465713/

相关文章:

使用 printf() 居中字符串

C:如何将双指针传递给函数

c - 使用 sizeof 作为数组下标时的警告

c - 在gets之前输入C.scanf。问题

c - 构建交叉编译器 : Intel Xeon E5649 >>> ARMv7 with libcURL

c - 使用 get 获取输入的字符串修改

c - 在 C 中用 gets 读取一个 txt 文件

c - 需要澄清有关 C 中的 gets 函数

c++ - gets() 正式弃用了吗?

c - 没有系统 API 的 ansi 字符串到宽字符串