我有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$
您可以看到first
fgets()
并没有等待来自键盘的字符串输入。我确信这是因为
fgets()
取的是输入缓冲区中的\n
,在我给出卷号并按下ENTER
之后。当我尝试使用
scanf
(在上面的代码中注释掉)而不是fgets
时,它工作得很好。但是我想使用fgets()
,而不是scanf()
。昨天从键盘(
%c
)获取字符时发生了类似的事情,在这种情况下,我可以给一个%c
(在%c
之前加一个空格)使scanf()
忽略\n
。我们讨论了这个问题。但是,我不能对
fgets()
执行类似的操作,因为我没有指定%s。(而且,令人惊讶的是,我不需要在%s之前为scanf()
留出空间,我最初认为我需要这样做)。 最佳答案
好吧,原来的想法似乎行不通,所以再试试:
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 - 如何使fgets()开始时忽略\n?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28485854/