有你的代码中的多个问题:
你不考的fgets()返回值。它将在文件结尾处返回NULL,然后您不应该继续提示更多输入。
您应该将字符串读入每个数组的下一个数组元素中。
你并不需要一个do/while循环,你已经正确测试结束的情况下,使用for循环,当阵列是全停。
您将行读入数组中,但不删除尾随换行符。
这里是一个修正版本:
#include
void trim_linefeed(char *buf) {
int len = strlen(buf);
if (len > 0 && buf[len - 1] == '\n')
buf[len - 1] = '\0';
}
int main(void) {
char buf[80];
int intTeacherSalary[50];
char charTeacherFirstName[50][50];
char charTeacherLastName[50][50];
int i, n;
for (n = 0; n < 50; n++) {
printf("Enter the teacher's first name: ");
if (!fgets(charTeacherFirstName[n], 50, stdin))
break;
if (charTeacherFirstName[n][0] == '\n')
break;
trim_linefeed(charTeacherFirstName[n]);
printf("Enter the teacher's last name: ");
if (!fgets(charTeacherLastName[n], 50, stdin))
break;
trim_linefeed(charTeacherLastName[n]);
printf("Enter teacher's salary: ");
if (!fgets(buf, sizeof buf, stdin))
break;
if (sscanf(buf, "%d", &intTeacherSalary[n]) != 1) {
intTeacherSalary[n] = 0;
}
}
printf("%d teachers:\n", n);
for (i = 0; i < n; i++) {
printf("%s %s: %d\n",
charTeacherFirstName[i],
charTeacherLastName[i],
intTeacherSalary[i]);
}
return 0;
}