You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言结构体数组初始化问题:同输入为何输出不同?

问题分析与解决

你的代码逻辑本身是没问题的,出现输出不一致的情况,基本都是输入环节出了问题,常见原因有这几个:

  • 输入不符合格式要求:scanf("%d %d")需要你输入两个整数,用空格、回车这类空白字符分隔。如果第二组输入只敲了一个整数就结束,或者输入了字母、符号这类非数字内容,scanf会读取失败,arr[1].y会保留内存里的随机垃圾值,输出自然和预期不一样。
    举个例子,要是你输入:

    1 1
    2
    

    这时候arr[1].x被设成2,但arr[1].y是没被初始化的随机数,打印出来肯定和x不一样。

  • 输入时的误操作:比如输入第二组数据时不小心敲错了值,自己没注意到;不过scanf会自动跳过空白字符,回车、空格多敲几个都不影响,这个情况概率偏低。

极端情况下可能是编译器或运行环境的bug,但这种情况极少,先优先排查输入问题。

快速验证方法

你可以给scanf加个返回值检查,确认每次是不是都读到了两个整数:

#include<stdio.h>

struct point {
    int x, y;
};

int main() {
    struct point arr[10];

    for(int i = 0; i < 2; i++) {
        // 用ret接收scanf的返回值,成功读取几个数就返回几
        int ret = scanf("%d %d", &arr[i].x, &arr[i].y);
        if(ret != 2) {
            printf("第%d组输入出错,只读到了%d个数值\n", i+1, ret);
            // 清空输入缓冲区里的残留内容,避免影响后续操作
            while(getchar() != '\n');
        }
    }

    printf("%d %d\n", arr[1].x, arr[1].y);
    return 0;
}

这样就能立刻知道是不是输入环节出了问题。


内容的提问来源于stack exchange,提问作者Mujahida

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 03:27:18