u013012497 2013-12-07 19:51 采纳率: 66.7%
浏览 8204
已采纳

c语言中当字符串和整形数据一起的时候应该怎样输入?

比如说我想在结构体中输入:
#include
struct score
{
int num;
char c[6];
int M;
int E;
int Chi;
int P;
int Che;
int sum;
};
void main()
{
struct score student[3];
int i;
for(i=0;i<3;i++)
{
scanf("%d%c%d%d%d%d%d",&student[i].num,&student[i].M,&student[i].E,&student[i].Chi,&student[i].P,&student[i].Che);
student[i].sum=student[i].M+student[i].E+student[i].Chi+student[i].P+student[i].Che;
}
for(i=0;i<3;i++)
printf("num=%d\tM=%d\tE=%d\tChi=%d\tP=%d\tChe=%d\tsum=%d\t",student[i].num,student[i].M,student[i].E,student[i].Chi,student[i].P,student[i].Che,student[i].sum);
}

我的输入语句【scanf("%d%c%d%d%d%d%d",&student[i].num,&student[i].M,&student[i].E,&student[i].Chi,&student[i].P,&student[i].Che);
】在执行的时候,只能输入一次,且结果是随机数,这是怎么回事?
我应该怎样改会方便输入?

展开全部

  • 写回答

4条回答 默认 最新

  • gaintsord 2013-12-16 19:30
    关注

    存在如下问题:
    1. 我看不到你include的头文件,想必是stdio.h吧。
    2. student这个数组未进行初始化,所以在一开始这个数组中各个成员的各个域具有一个不定的初始化值
    3. scanf的时候,第二个参数指定%c,但是他是整形,所以只取用了4个字节中的低位字节进行赋值,在BigEnding和LittleEnding的机器上将具有不同的结果,但是都会错:这一个接收了输入的字节加上另外三个具有不确定值的字节,一般来说,你或者会得到一个很大的值,或者得到一个负值
    4.同样的,scanf的地方,格式字串中指定了7个参数,但你只用了6个来接受,所有最后一个输入完全没有意义
    5.因为sum是加出来的,所以最后不但M,而且SUM都会出错.
    6.然后,建议你输出的时候,每一个成员按一行输出,这样会比较容易观察.另外,从你system("pause");这一行代码来看,你是在windows上完成的吧...
    最后,提出一点建议:命名,编码最好改进一下;再有就是你定义的这个数组最好考虑到字节对齐的问题.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)
编辑
预览

报告相同问题?

悬赏问题

  • ¥15 为什么树莓派5b显示禁止连接
  • ¥20 流量太费!寻找便宜的app音视频SDK或平替方案。
  • ¥15 kubeasz部署遇到问题
  • ¥15 GUIDE to App Designer Migration Tool for MATLAB
  • ¥50 第三代非支配排序遗传算法(NSGA-Ⅲ)和多目标粒子群优化算法(MOPSO)的实现
  • ¥20 plant simulation与python com接口实时数据交互
  • ¥15 有关汽车的MC9S12XS128单片机实验
  • ¥15 求c语言动态链表相关课程有偿,或能将这块知识点讲明白
  • ¥15 FLKT界面刷新异常
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部