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

你可能感兴趣的文章
Redis五种核心数据结构的基本使用与应用场景
查看>>
Redis五种数据结构简介
查看>>
PHPCMS多文件上传和上传数量限制
查看>>
phpEnv的PHP集成环境
查看>>
PHPExcel一些基本设置总结
查看>>
phpexcel中文手册
查看>>
PHPExcel导入导出 若在thinkPHP3.2中使用(无论实例还是静态调用(如new classname或classname::function)都必须加反斜杠,因3.2就命名空间,如/c...
查看>>
phpize及其用法
查看>>
phpMailer发送邮件
查看>>
PHPMailer发送邮件
查看>>
phpmailer发送邮件,可以带附件
查看>>
phpmailer的用法
查看>>
phpMQTT
查看>>
phpmyadmin 安装
查看>>
phpmyadmin导出数据库出现Fatal error: Cannot 'break' 2 levels in D:\phpstudy\WWW\phpMyAdmin
查看>>
phpmyadmin数据库建表及插入
查看>>
phpnow配置
查看>>
phprpc简单使用
查看>>
phpspider中当爬虫获取数据时如何去掉广告
查看>>
phpstorm 2016.3.3 激活
查看>>