[英]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.