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

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日

悬赏问题

  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测