m0_62027882 2022-05-14 20:48 采纳率: 100%
浏览 164
已结题

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

报告相同问题?

问题事件

  • 系统已结题 5月22日
  • 已采纳回答 5月14日
  • 创建了问题 5月14日