我需要这样做,以便当charTeacherFirstName输入任何内容(按下回车键)时,此循环停止输入。我有这个,但问题是,如果按下回车键,循环只是继续询问东西,就好像它没有读取空白。
int main(void)
{
int intTeacherSalary[50];
char charTeacherFirstName[50][50];
char charTeacherLastName[50][50];
do
{
printf("Enter the teacher's first name: ");
fgets(charTeacherFirstName, 50, stdin);
if (charTeacherFirstName == '\n')
{
break;
}
else
{
printf("Enter the teacher's last name: ");
fgets(charTeacherLastName, 50, stdin);
printf("Enter teacher's salary: ");
fgets(intTeacherSalary, 50, stdin);
}
} while (charTeacherFirstName != '\n');
}
答案 0 :(得分:1)
起初你的代码错了。 charTeacher...Name
是一个2dim数组,你不能像这样使用它。然后...Salary
为int
,但您使用fgets
进行了阅读,但不兼容。
此外,您无法比较string
和char
,这些情况有很大不同。
所以名字就是名字。单个字符。 'a', 'b', '!', '5'
是字符。当您对它们进行立即引用时,您需要将它们放在单引号'...'
之间。
字符串让我们说一系列字符("abc", "food", "what a nice weather"
。你可以认为它们是数组,就像你声明它们一样。它们也可以被声明为字符上的指针然后你需要使用malloc(N * sizeof(char))
(或类似的东西)来获取操作所需的内存。当你想要在字符串上立即引用时,你必须将它放在双引号("..."
)之间。字符串必须以NULL
个字符(即'\0'
)。
我想说在每种情况下,您对int
和int []
或int *
的说法都是一样的。
为了比较字符串,您需要使用strcmp
。使用man strcmp
查看其使用方式和返回方式,以及#include
所需的库。
您的情况应为if (strcmp(charTeacherFirstName, "\n") == 0) break;
答案 1 :(得分:0)
您的代码中存在多个问题:
您不测试fgets()
的返回值。它将在文件末尾返回NULL
,然后您不应继续提示输入更多内容。
您应该将字符串读入每个数组的下一个数组元素。
您不需要do
/ while
循环,您已经正确测试了最终用例,使用for
循环并在数组已满时停止。
您读取数组中的行但不删除尾随换行符。
以下是更正后的版本:
#include <stdio.h>
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;
}