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条)

报告相同问题?

悬赏问题

  • ¥20 双层网络上信息-疾病传播
  • ¥50 paddlepaddle pinn
  • ¥20 idea运行测试代码报错问题
  • ¥15 网络监控:网络故障告警通知
  • ¥15 django项目运行报编码错误
  • ¥15 请问这个是什么意思?
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏
  • ¥15 模糊pid与pid仿真结果几乎一样