博客
关于我
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/

你可能感兴趣的文章
Phantom.js维护者退出,项目的未来成疑
查看>>
Pharmaceutical的同学们都看过来,关于补码运算的复习相关内容
查看>>
Phaser性能测试加强版
查看>>
phoenix 开发API系列(一)创建简单的http api
查看>>
Phoenix 查看表信息及修改元数据
查看>>
phoenixframework集成了所有自动化测试的思想的平台。mark一下。
查看>>
phoenix_执行sql报错_Error: ERROR 504 (42703): Undefined column. columnName=(state=4270_大数据工作笔记0181
查看>>
phoenix启动失败_The history file `/root/.sqlline/history` may be an older history---记录024_大数据工作笔记0184
查看>>
Phoenix基础命令_视图映射和表映射_数字存储问题---大数据之Hbase工作笔记0036
查看>>
phoenix无法连接hbase shell创建表失败_报错_PleaseHoldException: Master is initializing---记录020_大数据工作笔记0180
查看>>
Phoenix简介_安装部署_以及连接使用---大数据之Hbase工作笔记0035
查看>>
phoenix连接hbase报错Can not resolve hadoop120, please check your network_记录026---大数据工作笔记0187
查看>>
Photoshop工作笔记001---Photoshop常用快捷键总结
查看>>
photoshop智能参考线
查看>>
Reids配置文件redis.conf中文详解
查看>>
Photoshop脚本入门
查看>>
PHP
查看>>
Regular Expression Notes
查看>>
PHP $FILES error码对应错误信息
查看>>
PHP $_FILES函数详解
查看>>