2014-10-07 132 views
0

我剛開始C編程,我是新手。我做了一些研究,但不幸的是找不到我的問題。不能使用BTW陣列,這就是爲什麼我不使用它。無法獲得我想要的輸入

所以,我正在製作一個函數來打印與給定數量一樣多的恆星。但功能是打印最後一個輸入號碼。

#include <stdio.h> 

int main(){ 

    void pstr(int *m){ 
     int j; 
     for(j = 0; j < *m; j++) 
      printf("*"); 
      printf("\n"); 
    } 

    int i; 
    int number = 9; 
    int n1, n2, n3, n4, n5, n6, n7, n8, n9; 

    printf("Enter 9 numbers (all less than 50):\n|1-2-3-4-5-6-7-8-9|\n"); 
    printf("|-----------------|\n ");   
    for(i=0; i < number; i++)           
     scanf("%d", &n1, &n2, &n3, &n4, &n5, &n6, &n7, &n8, &n9); 

    pstr(&n1); 

    system("PAUSE"); 
} 

我試圖打印第一個輸入號碼,但是它寫了最後一個(n9)。對不起,我的英文,謝謝。

+0

我驚訝的是,這個編譯自C函數不能被埋在另一個函數中。 I.E.將pstr函數移動到行之前int main(void)< - 一定要包含'void' – user3629249 2014-10-08 04:12:34

回答

3

您的scanf()格式字符串錯誤。

scanf("%d", &n1, &n2, &n3, &n4, &n5, &n6, &n7, &n8, &n9); 

您必須在您的情況下,一個%每次轉換,所以9。這意味着for是毫無意義的。

另外,您必須檢查scanf()是否會返回預期的成功轉換次數,否則您不能依賴具有適當值的變量。

+0

謝謝,但是當我再添加8個%s時,它會輸出第二個輸入減1. 1 – HalilM 2014-10-07 12:36:29

+0

@HalilM,Umm,不應該'%s'是'%d'? – 2014-10-07 12:36:43

+0

我試圖讓它複數,所以是的這是%d :)。 – HalilM 2014-10-07 12:38:18

0

申報號碼爲:

int n[9]; 

代替

int n1, n2, n3, n4, n5, n6, n7, n8, n9; 

然後使用循環爲:

for(i=0; i < number; i++)           
     scanf("%d", &n[i]); 

此外,使用的scanf之前,fflush輸出緩衝器,

fflush(stdout); 
+2

OP說:「不能使用陣列順便說一句,這就是爲什麼我不使用它。」 – usr2564301 2014-10-07 12:39:37

3
scanf("%d %d %d %d %d %d %d %d %d ", &n1, &n2, &n3, &n4, &n5, &n6, &n7, &n8, &n9); 

雖然更好的方法是使用數組和循環。既然你是新手,我認爲你還不知道。暫時使用這個。