这运行是什么情况啊?
#include<stdio.h>#include<stdlib.h>
#include<malloc.h>
#define LEN sizeof(struct ohno)
struct ohno
{
int num;
char name;
char job;
union
{
int class;
char position;
}category;
}person;
main()
{
int i;
for(i=0;i<2;i++)
{
printf("输入学号 : ");
scanf("%d",&person.num);
printf("输入姓名 : ");
scanf("%s",&person.name);
printf("输入职业 : ");
scanf("%c",&person.job);
if(person.job=='S')
{
printf("输入所在班级 : ");
scanf("%d",&person.category.class);
}
}
}
这是什么情况啊......
我给person创建结点也是这样。
应该不是结点的问题..
明明一个for循环没执行完啊...怎么就进入循环了。。
然后我在程序中加上了system("pause");
发现成这样了..如图
job没法输入??? 为什么啊.... auyhin丶 发表于 2017-1-5 12:57
job没法输入??? 为什么啊....
scanf()不读取换行符,所以读取不成功!
vc 6.0 可以在scanf()后面加个fflush(stdin);
我用codeblocks这个函数没用,可以自己写个函数
void flush(void)
{
while(getchar() != '\n')
continue;
}
也可以在每个scanf()后面加个 getchar(); 当然这个方法有些时候会不管用,如果缓冲区里面还有空格和换行符多种字符,一个getchar()是没用的,所以上面两种方法可以选一个,fflush(stdin); 也不是全部都可以用,有些编译器就不行。第二种自己写个函数都可以适用。{:5_91:} xw0314 发表于 2017-1-5 14:34
scanf()不读取换行符,所以读取不成功!
vc 6.0 可以在scanf()后面加个fflush(stdin);
我用codeblocks ...
{:10_285:}感谢大腿。
明白了..{:5_107:}万分感谢 auyhin丶 发表于 2017-1-5 14:49
感谢大腿。
明白了..万分感谢
{:5_91:}客气了,相互交流学习 很简单。我以前也纠结过。
%c改成%s就可以了。
scanf("%s".&preson.jpb); b84408190 发表于 2017-1-6 12:27
很简单。我以前也纠结过。
%c改成%s就可以了。
scanf("%s".&preson.jpb);
.....你可以去实现一下。你改为%s后面还要比较字符串。
以我现在的理解就是把缓存的回车键清掉就行了。如果有空格还是像3楼说的比较好吧 本帖最后由 b84408190 于 2017-1-7 06:57 编辑
auyhin丶 发表于 2017-1-6 13:03
.....你可以去实现一下。你改为%s后面还要比较字符串。
以我现在的理解就是把缓存的回车键清掉就行了。 ...
没有问题的. b84408190 发表于 2017-1-7 06:56
没有问题的.
涨知识了 auyhin丶 发表于 2017-1-7 11:35
涨知识了
{:5_91:}字符串不一定要用scanf()gets就不存在这个问题了
页:
[1]