标题:求助:关于scanf的输入问题
只看楼主
歌舞伎町
Rank: 2
等 级:论坛游民
帖 子:30
专家分:38
注 册:2013-8-7
结帖率:66.67%
已结贴  问题点数:20 回复次数:4 
求助:关于scanf的输入问题
这是定义的结构体
struct student
{
    int number;
    char name[20];
    struct student *next;
};
这是有问题的代码:
head=(struct student *)malloc(LEN);
printf("请输入学号\n");
scanf("%d",&head->number);
printf("请输入姓名\n");
gets(head->name);
在测试时,发现在执行scanf这一句时,输入数字再回车后,比如输入10000,gets语句就被自动跳过了,完全不给我输入字符串的机会,
如果我紧跟着数字后面输入字符串,比如10000zhanglei,发现那段字符串zhanglei被自动赋值给了name
只有把gets改成用scanf输入字符串,才能正常输入
为什么会出现这种情况?求解……
只有20分了,全部呈上……
搜索更多相关主题的帖子: number 结构体 字符串 姓名 
2013-09-10 12:50
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
先浏览一下坛上別人的帖子再提问好么?

授人以渔,不授人以鱼。
2013-09-10 13:19
zheguzai
Rank: 2
等 级:论坛游民
帖 子:2
专家分:20
注 册:2010-6-7
得分:20 
还是我来告诉你吧,原因就出那个gets()函数上面,gets()函数,原型与功能如下:


函数:gets(字符指针)
头文件:stdio.h(c),cstdio(c++)
原型:char*gets(char*buffer);
功能:
从stdin流中读取字符串,直至接受到换行符或EOF时停止,并将读取的结果存放在buffer指针所指向的字符数组中。换行符不作为读取串的内容,读取的换行符被转换为null值,并由此来结束字符串。

这个函数运行时只要接受到换行符就停止了,问题就出在这里,你的程序运行之后,你先输入了学号,然后回车,这个时候回车符就被gets()函数接收了,所以,你就没有输入姓名的机会了,你可以把你的程序调整下,把输入姓名放在前面就可以了
2013-09-10 13:32
歌舞伎町
Rank: 2
等 级:论坛游民
帖 子:30
专家分:38
注 册:2013-8-7
得分:0 
回复 3楼 zheguzai
thanks
2013-09-10 14:56
fc176154001
Rank: 2
来 自:四川阆中
等 级:论坛游民
帖 子:87
专家分:96
注 册:2013-6-16
得分:0 
貌似还可以在gets(head->name)前面加个gets("\n")把那个回车吃掉,不知道我说的对不对,

大神永远不能体会菜鸟们之间的惺惺相惜,
2013-09-11 19:05



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-420384-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 1.131185 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved