理想小青年 发表于 2018-5-26 10:37:51

结构、共用体输错误,调试求助

温故而知新,C基础知识还是不透彻,虽然已经开始学习汇编,但是调试结果还是看不懂
下面是错误代码,图片也是错误图片
问题自己成功解决,知道因为%s与%c引起的,但是调试的结果我却看不懂。
所以请求大神稍微讲解一下,错误代码如下
源代码如下
#include <stdio.h>

struct student
{
        int num;
        char name;
        char sex;
        char job;
        union
        {
                int Class;
                char position;
        }category;
}person;

int main(void)
{
        int i;
        for(i=0;i<2;i++)
        {
                printf("Please input the num: ");
                scanf("%d",&person.num);
                printf("Please input the name: ");
                scanf("%s",&person.name);
                printf("Please input the sex<M/F>: ");
                scanf("%s",&person.sex);
                printf("Please input the job<s/t>: ");
                scanf("%s",&person.job);
                if( 's' == person.job )
                {
                        printf("Please input the class: ");
                        scanf("%d",&person.category.Class);
                        printf("\n\n");
                }
                else if( 't' == person.job )
                {
                        printf("Please input the position: ");
                        scanf("%s",&person.category.position);
                        printf("\n\n");
                }
                else
                {
                        printf("Please input s/t\n");
                }
        }
       
        printf("No.\t name \t sex \t job \t class/position\n");
        printf("%d%s%s %s%d",person.num,person.name,person.sex,person.job,person.category.Class); //输出失败 %s 改成 %c正常了就 因为输出的是一个字符
        printf("%d%s%s%s%s",person.num,person.name,person.sex,person.job,person.category.position); //输出失败
        return 0;
}
输出person数据的时候就卡壳了,本来想用循环输出,但是最后定义的Class,position输出类型不同(%d,%s),省事就这样了。
没有用调试之前,都是用printf("1")来测试,一段一段测代码有没有正常运行或者出错,一个一个得值来测试,效率低而且错误率高,最后发现是%s的问题。
下面是调试图片汇编代码看不懂,比如代表输出的%s或者%c或者输的汇编代码在那个段?总是下一步的时候找不到文件(Fiind files)后期汇编学习进度跟上就懂了.....先求讲解

理想小青年 发表于 2018-5-26 10:48:57

或者说%s,%c    为什么一个字符用%s就出错了 汇编层面到底是怎样理解{:10_266:} 感觉处理问题都很肤浅自己 知道%c能输出一个字符就行知道一行字符%s来输出

czj1016130386 发表于 2018-9-21 17:32:15

scanf函数%s的时候就不能用&

claws0n 发表于 2018-9-22 00:09:36

理想小青年 发表于 2018-5-26 10:48
或者说%s,%c    为什么一个字符用%s就出错了 汇编层面到底是怎样理解 感觉处理问题都很肤浅自己...

哥哥,这个还需要??刚好有人回复,我也尝试回答以下。{:10_254:}{:10_254:}
scanf(... &a); 需要透过地址才能赋值
char sex, job; //只有一个格,用 %s 需要两个格,越界了。
char name; //数组名就是首地址,但跨度问题要注意。用 &name 其实是未定义行为,但是多数的编译器都认了。应该是 &name
页: [1]
查看完整版本: 结构、共用体输错误,调试求助