m0_62027882
2022-05-14 20:48
采纳率: 100%
浏览 29

C语言scanf连续输入两个字符串,中间加了空格,但是前一个在读取完自身后会读取后一个字符串,后一个字符串正常,这是哪里出了问题

代码块

int n,i,j;
scanf("%d",&n);
struct student human[n],temp;

 for(i=0;i<n;i++){
    scanf("%s %s %d %d %d",human[i].sno,human[i].name,&human[i].score1,&human[i].score2,&human[i].score3);
}

 for(i=0;i<n;i++){
    printf("%s %s %d %d %d\n",human[i].sno,human[i].name,human[i].score1,human[i].score2,human[i].score3);
}

输入
5
00001 huanglan 78 83 75
00002 wanghai 76 80 77
00003 shenqiang 87 83 76
10001 zhangfeng 92 88 78
21987 zhangmeng 80 82 75
输出
00001huanglan huanglan 78 83 75
00002wanghai wanghai 76 80 77
00003shenqiang shenqiang 87 83 76
10001zhangfeng zhangfeng 92 88 78
21987zhangmeng zhangmeng 80 82 75

这到底是为什么,查了好久都找不到原因

  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 邀请回答

2条回答 默认 最新

  • 树下等苹果 2022-05-14 21:04
    最佳回答

    这可能是输出的问题吧,结构体的元素存储在一块内存中,输出时因为你的两个字符串是相连的,并且在每个字符串后面没有结束符'\0'。所以输出第一个字符串时,他会连第二个一起输出。解决办法:输入结束之后,在字符串的最后一个元素添加‘\0’。如:

    for(i=0;i<n;i++){
        scanf("%s %s %d %d %d",human[i].sno,human[i].name,&human[i].score1,&human[i].score2,&human[i].score3);
    }
    human[i].sno=‘\0’;
    human[i].name=‘\0’;
    
    
    评论
    解决 1 无用
    打赏 举报
查看更多回答(1条)