u013012497 2013-12-08 03:51 采纳率: 66.7%
浏览 8195
已采纳

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-17 03: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 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)
  • ¥20 matlab yalmip kkt 双层优化问题
  • ¥15 如何在3D高斯飞溅的渲染的场景中获得一个可控的旋转物体
  • ¥88 实在没有想法,需要个思路
  • ¥15 MATLAB报错输入参数太多
  • ¥15 python中合并修改日期相同的CSV文件并按照修改日期的名字命名文件
  • ¥15 有赏,i卡绘世画不出
  • ¥15 如何用stata画出文献中常见的安慰剂检验图
  • ¥15 c语言链表结构体数据插入