[英]Invalid int in scanf and printf
我最近开始学习C语言编程,现在我正在做这个简单的程序,我应该问用户5个数字并以相反的顺序显示它们。 我设法做的很好,但是有一个很大的问题。 第一个数字很荒谬。 我无法真正解释它,所以我将留下一个图像来显示它:
这是代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void main()
{
int numeros[5];
int i;
for (i=0; i<5; i++) {
scanf("%i", &numeros[i]);
}
for (i=5; i>0; i--) {
printf("%i \n", numeros[i]);
}
system("pause");
}
数组从索引0开始,一直到n-1。 因此,您将数组定义为numeros [5],因此n =5。因此,数组从0开始直到5-1 = 4。
您获得的数字(屏幕快照中的负数)是一个垃圾值,在您尝试访问numeros [5]时,运行与运行之间以及计算机与计算机之间可能/可能没有差异。
因此,您需要从以下位置更改for循环
for (i=5; i>0; i--){
至
for (i=4; i>=0; i--){
您的第二个循环必须是
for (i=4; i>=0; i--)
代替
for (i=5; i>0; i--)
因为它们以0
开头并以length-1
结束
它们可以描述为。
因此,您尝试读取的值不在数组中,因此很垃圾
第二个循环计数为5,4,3,2,1。 由于numeros
有5个元素,因此第6个元素( numeros[5]
)不存在,因此您会得到一个怪异的数字(这在技术上是未定义的行为 )。
一个简单的解决方法是从4倒数到0:
for (i=4; i>=0; i--){
printf("%i \n", numeros[i]);
}
这是因为数组的最后一个索引始终是数组的长度-1,因为众所周知,在C语言中,数组从0开始。
在您的情况下,数组的长度为5,所以最后一个索引为4。在循环中,您尝试从位置5开始循环,因此您正在访问的内容不属于数组。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.