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
相关产品推荐
相关产品推荐

