鱼C论坛

 找回密码
 立即注册
查看: 1954|回复: 3

[已解决]结构、共用体输错误,调试求助

[复制链接]
发表于 2018-5-26 10:37:51 | 显示全部楼层 |阅读模式

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

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

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

  2. struct student
  3. {
  4.         int num;
  5.         char name[10];
  6.         char sex;
  7.         char job;
  8.         union
  9.         {
  10.                 int Class;
  11.                 char position[10];
  12.         }category;
  13. }person[2];

  14. int main(void)
  15. {
  16.         int i;
  17.         for(i=0;i<2;i++)
  18.         {
  19.                 printf("Please input the num: ");
  20.                 scanf("%d",&person[i].num);
  21.                 printf("Please input the name: ");
  22.                 scanf("%s",&person[i].name);
  23.                 printf("Please input the sex<M/F>: ");
  24.                 scanf("%s",&person[i].sex);
  25.                 printf("Please input the job<s/t>: ");
  26.                 scanf("%s",&person[i].job);
  27.                 if( 's' == person[i].job )
  28.                 {
  29.                         printf("Please input the class: ");
  30.                         scanf("%d",&person[i].category.Class);
  31.                         printf("\n\n");
  32.                 }
  33.                 else if( 't' == person[i].job )
  34.                 {
  35.                         printf("Please input the position: ");
  36.                         scanf("%s",&person[i].category.position);
  37.                         printf("\n\n");
  38.                 }
  39.                 else
  40.                 {
  41.                         printf("Please input s/t\n");
  42.                 }
  43.         }
  44.        
  45.         printf("No.\t name \t sex \t job \t class/position\n");
  46.         printf("%d  %s  %s %s  %d",person[0].num,person[0].name,person[0].sex,person[0].job,person[0].category.Class); //输出失败 %s 改成 %c正常了就 因为输出的是一个字符
  47.         printf("%d  %s  %s  %s  %s",person[1].num,person[1].name,person[1].sex,person[1].job,person[1].category.position); //输出失败
  48.         return 0;
  49. }
复制代码

输出person数据的时候就卡壳了,本来想用循环输出,但是最后定义的Class,position输出类型不同(%d,%s),省事就这样了。
没有用调试之前,都是用printf("1")来测试,一段一段测代码有没有正常运行或者出错,一个一个得值来测试,效率低而且错误率高,最后发现是%s的问题。
下面是调试图片汇编代码看不懂,比如代表输出的%s或者%c或者输的汇编代码在那个段?总是下一步的时候找不到文件(Fiind files)  后期汇编学习进度跟上就懂了.....先求讲解
最佳答案
2018-9-22 00:09:36
理想小青年 发表于 2018-5-26 10:48
或者说%s,%c    为什么一个字符用%s就出错了 汇编层面到底是怎样理解 感觉处理问题都很肤浅自己  ...

哥哥,这个还需要??刚好有人回复,我也尝试回答以下。
scanf(... &a); 需要透过地址才能赋值
char sex, job; //只有一个格,用 %s 需要两个格,越界了。
char name[10]; //数组名就是首地址,但跨度问题要注意。用 &name 其实是未定义行为,但是多数的编译器都认了。应该是 &name[0]
汇编代码.png
Values.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-5-26 10:48:57 | 显示全部楼层
或者说%s,%c    为什么一个字符用%s就出错了 汇编层面到底是怎样理解 感觉处理问题都很肤浅自己 知道%c能输出一个字符就行  知道一行字符%s来输出
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-21 17:32:15 | 显示全部楼层
scanf函数  %s的时候就不能用&
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-22 00:09:36 | 显示全部楼层    本楼为最佳答案   
理想小青年 发表于 2018-5-26 10:48
或者说%s,%c    为什么一个字符用%s就出错了 汇编层面到底是怎样理解 感觉处理问题都很肤浅自己  ...

哥哥,这个还需要??刚好有人回复,我也尝试回答以下。
scanf(... &a); 需要透过地址才能赋值
char sex, job; //只有一个格,用 %s 需要两个格,越界了。
char name[10]; //数组名就是首地址,但跨度问题要注意。用 &name 其实是未定义行为,但是多数的编译器都认了。应该是 &name[0]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-16 22:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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