gpt4 book ai didi

c - 如何让 fgets() 在开头忽略 a\n?

转载 作者:太空宇宙 更新时间:2023-11-04 04:38:49 25 4
gpt4 key购买 nike

我有以下 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()正在服用\n在我给出卷号并按下 ENTER 之后,它在输入缓冲区中.

当我尝试使用 scanf 时(在上面的代码中被注释掉了)而不是 fgets ,它工作正常。但是我想使用 fgets() , 不是 scanf() .

昨天我从键盘(%c)获取一个字符时发生了这样的事情,在这种情况下我可以给出一个%c (在 %c 之前有一个空格)来制作 scanf()忽略 \n .讨论了这个问题here .

但是,我不能用 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() 在开头忽略 a\n?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28485854/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com