如何让 fgets() 忽略开头的 \n?
How to make fgets() ignore a \n at beginning?
我有以下 C 代码。
struct student
{
int rollNumber;
char name[20];
char department[20];
char course[20];
int yearOfJoining;
};
int main()
{
// Creating a 'student' variable.
struct student s;
// Take the info of student from keyboard
printf("Student \n-------------------\n");
printf("Roll no: ");
scanf("%d",&s.rollNumber);
printf("Name: ");
fgets(s.name, 20, stdin);
//scanf("%s",&s.name);
printf("Department: ");
fgets(s.department, 20, stdin);
//scanf("%s",&s.department);
printf("Course: ");
fgets(s.course, 20, stdin);
//scanf("%s",&s.course);
printf("Year of joining: ");
scanf("%d",&s.yearOfJoining);
return 0;
}
然而,当我编译 运行 下面的代码时会发生。
-bash-4.1$ ./a.out
Student
-------------------
Roll no: 1
Name: Department: ECE
Course: CE
Year of joining: 2006
-bash-4.1$
可以看到第一个fgets()
没有等待键盘输入的字符串。
我确定这是因为 fgets()
在我给出卷号并按下 ENTER
后正在使用输入缓冲区中的 \n
。
当我尝试使用 scanf
(在上面的代码中被注释掉)而不是 fgets
时,它工作正常。但是我想使用 fgets()
,而不是 scanf()
。
昨天我从键盘 (%c
) 获取一个字符时发生了这样的事情,在这种情况下我可以给出一个 %c
(在 [=20 之前有一个 space =]) 使 scanf()
忽略 \n
。这个问题已经讨论 。
但是,我不能用 fgets()
做类似的事情,因为我没有指定 (%s)。 (此外,令人惊讶的是,我不必在 scanf()
的 %s 之前给出 space,我最初认为我需要这样做)。
好的,原来的思路好像不行,再试一次:
scanf("%d",&s.rollNumber);
printf("Name: ");
fgets(s.name, 20, stdin); /* capture the new line */
fgets(s.name, 20, stdin);
最初的想法:
只需告诉 scanf
也捕获换行符:
scanf("%d\n",&s[i].rollNumber);
我有以下 C 代码。
struct student
{
int rollNumber;
char name[20];
char department[20];
char course[20];
int yearOfJoining;
};
int main()
{
// Creating a 'student' variable.
struct student s;
// Take the info of student from keyboard
printf("Student \n-------------------\n");
printf("Roll no: ");
scanf("%d",&s.rollNumber);
printf("Name: ");
fgets(s.name, 20, stdin);
//scanf("%s",&s.name);
printf("Department: ");
fgets(s.department, 20, stdin);
//scanf("%s",&s.department);
printf("Course: ");
fgets(s.course, 20, stdin);
//scanf("%s",&s.course);
printf("Year of joining: ");
scanf("%d",&s.yearOfJoining);
return 0;
}
然而,当我编译 运行 下面的代码时会发生。
-bash-4.1$ ./a.out
Student
-------------------
Roll no: 1
Name: Department: ECE
Course: CE
Year of joining: 2006
-bash-4.1$
可以看到第一个fgets()
没有等待键盘输入的字符串。
我确定这是因为 fgets()
在我给出卷号并按下 ENTER
后正在使用输入缓冲区中的 \n
。
当我尝试使用 scanf
(在上面的代码中被注释掉)而不是 fgets
时,它工作正常。但是我想使用 fgets()
,而不是 scanf()
。
昨天我从键盘 (%c
) 获取一个字符时发生了这样的事情,在这种情况下我可以给出一个 %c
(在 [=20 之前有一个 space =]) 使 scanf()
忽略 \n
。这个问题已经讨论
但是,我不能用 fgets()
做类似的事情,因为我没有指定 (%s)。 (此外,令人惊讶的是,我不必在 scanf()
的 %s 之前给出 space,我最初认为我需要这样做)。
好的,原来的思路好像不行,再试一次:
scanf("%d",&s.rollNumber);
printf("Name: ");
fgets(s.name, 20, stdin); /* capture the new line */
fgets(s.name, 20, stdin);
最初的想法:
只需告诉 scanf
也捕获换行符:
scanf("%d\n",&s[i].rollNumber);