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

你可能感兴趣的文章
NPOI设置单元格格式
查看>>
Npp删除选中行的Macro录制方式
查看>>
NR,NF,FNR
查看>>
nrf24l01+arduino
查看>>
nrf开发笔记一开发软件
查看>>
nrm —— 快速切换 NPM 源 (附带测速功能)
查看>>
nrm报错 [ERR_INVALID_ARG_TYPE]
查看>>
NS3 IP首部校验和
查看>>
NSDateFormatter的替代方法
查看>>
NSError 的使用方法
查看>>
NSGA-Ⅲ源代码
查看>>
nsis 安装脚本示例(转)
查看>>
NSJSON的用法(oc系统自带的解析方法)
查看>>
nslookup 的基本知识与命令详解
查看>>
NSNumber与NSInteger的区别 -bei
查看>>
NSOperation基本操作
查看>>
NSRange 范围
查看>>
NSSet集合 无序的 不能重复的
查看>>
NSURLSession下载和断点续传
查看>>
NSUserdefault读书笔记
查看>>