【发布时间】:2013-01-06 02:32:24
【问题描述】:
我是 C 新手,正在做一些练习,但在 while 循环中遇到了 get() 问题。在搜索中,我认为它可能与 \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;
}
提前致谢!
【问题讨论】:
-
employee_num 最初设置为多少?
-
永远不会使用
gets。此函数在修复后已损坏,它自己的联机帮助页告诉您不要使用它:永远不要使用gets()。因为在事先不知道数据的情况下不可能知道gets()会读取多少个字符,并且因为gets()会继续存储超过缓冲区末尾的字符,所以使用起来非常危险。它已被用来破坏计算机安全。请改用 fgets()。 -
employee_num 最初设置为 0。我刚刚开始阅读有关 gets() 的问题,但我仍然很好奇为什么它不能正确循环。
-
@user1929959 在输入流上使用 fflush 是未定义的行为,所以不,这将是一个非常糟糕的主意。两个相邻的危险功能不会相互抵消...
-
为了记录,gets 已从当前标准中的 C 语言中删除。它不再是有效的 C。