C语言数值数组比较代码无结果问题排查求助
问题分析与修复
你的代码存在几个关键问题,直接导致无法输出正确的比较结果:
1. 变长数组定义时机错误
你在变量n未被赋值前,就定义了int a[n];和int b[n];。此时n是未初始化的局部变量,值为随机垃圾值,这会让数组大小完全不确定,属于未定义行为,后续的输入、比较操作都会混乱。
2. ta的计算与使用逻辑错误
sizeof(a)计算的是数组总字节数,不是元素个数。比如int占4字节时,sizeof(a)等于4 * 元素数,你用它作为循环条件k<ta,会导致循环执行远超实际元素数的次数,触发数组越界访问。- 更严重的是,
ta是在n未赋值时计算的,这个值完全没有实际意义。
3. 拼写错误
输出语句里的Is ne sont pas identiques.是拼写错误,正确写法应为Ils ne sont pas identiques.。
4. 比较逻辑的冗余设计
原代码中else if(k == n-1)的判断没必要,只要循环完整遍历所有元素且未触发不等的退出逻辑,就说明两个数组完全相同,此时直接输出相等提示即可。
修正后的代码
#include<stdio.h> #include<stdlib.h> int main() { int n, i, k; // 先获取数组长度n,再定义变长数组 printf("Enter la taille du tableux: "); scanf("%d", &n); int a[n]; int b[n]; // 输入数组a printf("Enter %d nombres: ",n); for(i = 0; i < n; ++i) { scanf("%d", &a[i]); } // 输入数组b printf("Enter %d nombres: ",n); for(i = 0; i < n; ++i) { scanf("%d", &b[i]); } // 比较两个数组 for(k = 0; k < n; k++) { if(a[k] != b[k]) { printf("Ils ne sont pas identiques.\n"); exit(0); } } // 循环正常结束说明所有元素都相等 printf("Ils sont identiques.\n"); return 0; }
内容的提问来源于stack exchange,提问作者Med talib
相关产品推荐
相关产品推荐

