博客
关于我
2021年4月18日C语言Vc6输出结果出现-858993460
阅读量:396 次
发布时间:2019-03-05

本文共 1093 字,大约阅读时间需要 3 分钟。

数组初始化错误与循环条件失控

在编写C语言程序时,经常会遇到一些容易导致逻辑错误的问题。本文将详细分析一个常见的数组索引错误案例,并说明如何通过合理的代码修正来避免问题。

数组访问错误分析

以下代码段中,用户尝试读取并打印一个数组的元素:

#include 
int main() { int a[100], i = 0, m, n = 3; char ch; printf("请输入你想要的升序排列的数字,按回车键结束\n"); do { scanf("%d", &a[i]); i++; } while (ch = getchar() != '\n'); for (m = 0; m <= i; m++) { printf("%3d\n", a[m]); }}

在上述代码中,for循环的条件设置为m <= i,这意味着当i达到预期值时,m会继续执行循环体内的代码。这种情况下,会多打印一个未初始化的数组元素。

错误原因

数组在C语言中是以零索引的方式存储的。i变量在循环中被初始化为0,并且一直增加直到用户输入结束。for循环的条件m <= i实际上会比预期多运行一次。例如,当i在最后一次循环中达到99时,m也会继续执行到100次循环,导致a[100]被访问,这在数组a的定义中是未被初始化的内存位置。

这样一来,程序会输出一个未经赋值的未知值(通常为-858993460),这正是用户所遇到的问题。

代码修正方法

为了修正这个错误,我们只需要将for循环的条件从m <= i更改为m < i。这样,循环将正好执行i次,避免多打印一个未初始化的元素。

修正后的代码如下:

#include 
int main() { int a[100], i = 0, m, n = 3; char ch; printf("请输入你想要的升序排列的数字,按回车键结束\n"); do { scanf("%d", &a[i]); i++; } while (ch = getchar() != '\n'); for (m = 0; m < i; m++) { printf("%3d\n", a[m]); }}

总结

数组索引错误是一个常见的问题,尤其是在使用零索引系统时。通过仔细检查循环条件,可以有效避免类似的错误。记住,在编写循环时,始终明确循环的起始和结束条件,以避免程序运行异常。

转载地址:http://gkeg.baihongyu.com/

你可能感兴趣的文章
Optional讲解
查看>>
ORA-00923: 未找到要求的 FROM 关键字
查看>>
ORA-00932: inconsistent datatypes: expected - got NCLOB【ORA-00932: 数据类型不一致: 应为 -, 但却获得 NCLOB 】【解决办法】
查看>>
ORA-00942 表或视图不存在
查看>>
ORA-01034: ORACLE not available
查看>>
ORA-01152: 文件 1 没有从过旧的备份中还原
查看>>
ORA-01207:文件比控制文件更新 - 旧的控制文件
查看>>
ORA-01795: 列表中的最大表达式数为 1000
查看>>
ORA-06575: 程序包或函数 NO_VM_DROP_PROC 处于无效状态
查看>>
ORA-08102的错误
查看>>
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor异常
查看>>
ORA-12514: TNS:listener does not currently know of service问题原因
查看>>
ora-12541:tns:no listener
查看>>
【docker知识】联合文件系统(unionFS)原理
查看>>
ORACEL学习--理解over()函数
查看>>
ORAchk-数据库健康检查
查看>>
oracle 10g crs命令,Oracle 10g CRS安装问题解决一例
查看>>
Oracle 10g ORA-01034: ORACLE not available 错误
查看>>
oracle 10g的安装配置
查看>>
Oracle 11.2.0.4 x64 RAC修改public/private/vip/scan地址
查看>>