我是C的新手,正在进行一些练习,但在while循环中遇到了gets()问题。在搜索中,我相信它可能与\ n字符有关,但是我希望有人能够给我一个更详尽的解释:
这个循环只会运行一次 - 它将打印'输入姓氏'再次屏幕,然后在get()有机会再次输入任何输入之前退出循环:
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;
}
提前致谢!
答案 0 :(得分:4)
在阅读薪水后,您在输入缓冲区中有换行符(\n
)。这被作为第二次迭代中的姓氏。你可以在最后一次scanf之后添加getchar()
来忽略它:
while (employee_num <= 10) {
...
printf("Enter salary ");
scanf("%d", &employee[employee_num].salary);
++employee_num;
getchar();
}
答案 1 :(得分:2)
参考skjaidev的回答,
使用gets()
,如果找到换行符字符(\n
),则不会将其复制到字符串中,这就是您遇到问题的原因。
另外,
请注意,gets与fgets
完全不同:不仅使用stdin
作为源,而且在结果字符串中不包含结尾newline
字符,并且不允许指定最大值str的大小(可能导致缓冲区溢出)。
在程序中使用gets()
被认为是糟糕做法