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 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 软件测试决策法疑问求解答
  • ¥15 win11 23H2删除推荐的项目,支持注册表等
  • ¥15 matlab 用yalmip搭建模型,cplex求解,线性化处理的方法
  • ¥15 qt6.6.3 基于百度云的语音识别 不会改
  • ¥15 关于#目标检测#的问题:大概就是类似后台自动检测某下架商品的库存,在他监测到该商品上架并且可以购买的瞬间点击立即购买下单
  • ¥15 神经网络怎么把隐含层变量融合到损失函数中?
  • ¥15 lingo18勾选global solver求解使用的算法
  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行
  • ¥20 测距传感器数据手册i2c