2015-11-08 79 views
0

我正在學習和練習C.拋開輸出格式。我不明白爲什麼要爲所有數組元素輸出「1」,或者數字甚至來自哪裏。爲什麼「1」被存儲在所有數組索引位置?

即使輸入5「5」,輸出仍然是「1」。

#define LIMIT 5 
#include <stdio.h> 
#include<stdlib.h> 
void getNums(); 

int main() { 
    getNums(); 
    return 0; 
} 

void getNums() { 
    int newRay[LIMIT]; 
    for(int i = 0; i < 5; i++) { 
     int element; 
     int result = scanf("%d", &element); 
     newRay[i] = result; 
     printf("%d", newRay[i]); 
    } 
} 

回答

2

result存儲的scanf返回值,即,號供給到scanf格式字符串匹配的。你真正想要的是值讀取,存儲在element

 newRay[i] = element; 

注:

  • 更好地利用LIMIT一致。你的程序可能只是「quick'n'dirty」,但你應該在for -loop中替換5
1

您正在爲數組元素分配返回值scanfscanf返回分配的輸入項目的數量。

scanf("%d", &element);,只有一個輸入項分配的,所以它會返回1

變化

int result = scanf("%d", &element); 
newRay[i] = result; 

scanf("%d", &element); 
newRay[i] = element 
2

scanf返回成功分配輸入的數量。在你的情況下,如果分配給element成功,則返回1

你可能想用的是:

newRay[i] = element; 

你應該做的是:

int result = scanf("%d", &element); 
    if (result == 1) 
    { 
     newRay[i] = element; 
    } 
    else 
    { 
     // Unable to read the input 
     // Deal with error. 
    } 
0

你之所以因爲你只捕獲scanf函數的返回值,所以得到「1」。您輸入的值由scanf返回,但它會被複制到元素中(通過引用它來使用元素 - &元素)。不需要結果變量。

void getNums(){ int newRay[LIMIT]; int element; for(int i=0; i<5;i++){ scanf("%d",&element); newRay[i] = element; printf("%d", newRay[i]); } }