鱼C论坛

 找回密码
 立即注册
查看: 2081|回复: 9

这运行是什么情况啊?

[复制链接]
发表于 2017-1-5 12:56:48 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define LEN sizeof(struct ohno)
struct ohno
{
        int num;
        char name[10];
        
        char job;
        union
        {
          int class;
          char position[10];
        }category;
    
}person[2];

main()
{   
    int i;
        for(i=0;i<2;i++)
        {
           printf("输入学号 : ");
           scanf("%d",&person[i].num);
           printf("输入姓名 : ");
           scanf("%s",&person[i].name);
           printf("输入职业 : ");
           scanf("%c",&person[i].job);

           
           
           if(person[i].job=='S')
           {
              printf("输入所在班级 : ");
                  scanf("%d",&person[i].category.class);
           }
        }
}

1111.png


这是什么情况啊......

我给person创建结点也是这样。
应该不是结点的问题..

明明一个for循环没执行完啊...怎么就进入循环了。。


然后我在程序中加上了system("pause");
发现成这样了..如图

2222.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-1-5 12:57:43 | 显示全部楼层
job没法输入??? 为什么啊....
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-1-5 14:34:03 | 显示全部楼层
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); 也不是全部都可以用,有些编译器就不行。第二种自己写个函数都可以适用。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-1-5 14:49:41 | 显示全部楼层
xw0314 发表于 2017-1-5 14:34
scanf()不读取换行符,所以读取不成功!
vc 6.0 可以在scanf()后面加个fflush(stdin);
我用codeblocks ...

  感谢大腿。
明白了..万分感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-1-5 14:51:31 | 显示全部楼层
auyhin丶 发表于 2017-1-5 14:49
感谢大腿。
明白了..万分感谢

客气了,相互交流学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-1-6 12:27:56 | 显示全部楼层
很简单。我以前也纠结过。
%c改成%s就可以了。
scanf("%s".&preson[i].jpb);
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-1-6 13:03:05 | 显示全部楼层
b84408190 发表于 2017-1-6 12:27
很简单。我以前也纠结过。
%c改成%s就可以了。
scanf("%s".&preson.jpb);

.....你可以去实现一下。你改为%s后面还要比较字符串。
以我现在的理解就是把缓存的回车键清掉就行了。如果有空格还是像3楼说的比较好吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-1-7 06:56:27 | 显示全部楼层
本帖最后由 b84408190 于 2017-1-7 06:57 编辑

D.png
auyhin丶 发表于 2017-1-6 13:03
.....你可以去实现一下。你改为%s后面还要比较字符串。
以我现在的理解就是把缓存的回车键清掉就行了。 ...


没有问题的.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-1-7 11:35:27 | 显示全部楼层

涨知识了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-1-9 20:21:31 | 显示全部楼层

字符串不一定要用scanf()  gets就不存在这个问题了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-27 19:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表