簡體   English   中英

scanf和printf中的int無效

[英]Invalid int in scanf and printf

我最近開始學習C語言編程,現在我正在做這個簡單的程序,我應該問用戶5個數字並以相反的順序顯示它們。 我設法做的很好,但是有一個很大的問題。 第一個數字很荒謬。 我無法真正解釋它,所以我將留下一個圖像來顯示它:

img

這是代碼:

#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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM