VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

有编程疑问吗?还请到提问专区发帖提问!
搜索
查看: 791|回复: 4

学习结构体时遇到的问题

[复制链接]
07_avatar_middle
在线会员 Acher陈 发表于 2018-3-1 15:02:54 | 显示全部楼层 |阅读模式
源代码如下:
  1. # include <stdio.h>
  2. struct student
  3. {
  4.         int num;
  5.         char name[20];
  6.         char sex;
  7.         float score;
  8. };
  9. void main()
  10. {
  11.         struct student stu[3];
  12.         for (int i = 0; i < 3;i++)
  13.         {
  14.                 printf("input num\n");
  15.                 scanf("%d", stu[0].num);
  16.                 printf("input name\n");
  17.                 scanf("%s", stu[i].name);
  18.                 printf("input sex\n");
  19.                 scanf("%c", stu[i].sex);
  20.                 printf("input score\n");
  21.                 scanf("%f", stu[i].score);
  22.         }
  23.         for (int i = 0; i < 3; i++)
  24.         {
  25.                 printf("%d", stu[i].num);
  26.                 printf("%s", stu[i].name);
  27.                 printf("%c", stu[i].sex);
  28.                 printf("%f", stu[i].score);
  29.         }
  30. }
复制代码


问题如下:
学习结构体时遇到的问题

打开异常设置问题是这样的
学习结构体时遇到的问题

请问这样的问题怎么解决呢?是哪儿出了问题。谢谢




上一篇:标准输入cin的返回值以及while(cin&gt;&gt;x)的问题
下一篇:尾插法建立动态链表

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

51_avatar_middle
online_admins Syc 发表于 2018-3-1 15:18:35 | 显示全部楼层
scanf 你没用对:
  1. printf("input num\n");
  2. scanf("%d", &stu[0].num);
  3. printf("input name\n");
  4. scanf("%s", stu[i].name);
  5. printf("input sex\n");
  6. scanf("%c", &stu[i].sex);
  7. printf("input score\n");
  8. scanf("%f", &stu[i].score);
复制代码

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

07_avatar_middle
ico_lz  楼主| Acher陈 发表于 2018-3-2 14:17:18 | 显示全部楼层
Syc 发表于 2018-3-1 15:18
scanf 你没用对:


这段代码在书上是:
  1.                 printf("input num\n");
  2.                 scanf("%d", &stu[i].num);
  3.                 printf("input name\n");
  4.                 scanf("%s", stu[i].name);
  5.                 getchar();
  6.                 printf("input sex\n");
  7.                 scanf("%c", &stu[i].sex);
  8.                 printf("input score\n");
  9.                 scanf("%f",& stu[i].score);
复制代码


有两个问题我还没有相通。
  第一:
  1. scanf("%s", stu[i].name);
复制代码
为什么这一行代码没有加&号;像这样
  1. scanf("%s", &stu[i].name);
复制代码

  第二:在我修改后的代码中
  1.                 printf("input num\n");
  2.                 scanf("%d", &stu[i].num);
  3.                 printf("input name\n");
  4.                 scanf("%s", &stu[i].name);
  5.                 printf("input sex\n");
  6.                 scanf("%c", &stu[i].sex);
  7.                 printf("input score\n");
  8.                 scanf("%f",& stu[i].score);
复制代码

第一个问题加上&号还是能够实现功能,但是如果没有加上getchar();这一句就不能够输入性别,这个是为什么呢?我想搞清楚原理是什么。谢谢

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

51_avatar_middle
online_admins Syc 发表于 2018-3-2 14:27:13 | 显示全部楼层
Acher陈 发表于 2018-3-2 14:17
这段代码在书上是:


因为 scanf 要把键盘的输入放到对应的变量中,这个变量要提供地址,所以要加&取地址符,为什么stu[ i ].name不加就行,因为name是数组名字,本身就是地址了,所以可以不加!

getchar(); 这句应该是把输入缓冲区的回车符号先取出来或者说去掉,之后再输入性别的单一字符

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

07_avatar_middle
ico_lz  楼主| Acher陈 发表于 2018-3-2 18:00:22 | 显示全部楼层
Syc 发表于 2018-3-2 14:27
因为 scanf 要把键盘的输入放到对应的变量中,这个变量要提供地址,所以要加&取地址符,为什么stu[ i ] ...

谢谢,懂啦

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2018-12-15 20:52

Powered by Discuz! X3.4

© 2009-2018 cctry.com

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