2013-11-21 36 views
0

以下是我的代碼,它不停止第一個索引,我想知道爲什麼?同樣是scanf爲什麼scanf或fgetc無法正常工作

#include<stdio.h> 

void main() 
{ 
    int n = 0, i = 0; 
    char arr[10]; 
    printf("How many characters do u want to enter "); 
    scanf("%d", &n); 
    //printf("\n\t%d", n); 
    for(i = 0; i < n; i++) 
    {  
    printf("Enter %d character-->\n",i); 
    char ch = fgetc(stdin); 
    arr[i] = ch; 
    //putchar(arr[i]);  
    }  
    i = 0; 
    printf("You have entered characters are \n"); 
    for(i = 0; i < n; i++) 
    {  
    printf("arr[%d] = %c\n", i, arr[i]); 
    }  
    printf("\n"); 
} 

結果當我運行這段代碼我獲得以下

How many characters do u want to enter 5 
Enter 0 character--> 
Enter 1 character--> 

程序不等待第一個字符輸入。

+0

它應該是'int main(void)',而不是'void main()'。 –

回答

3

您是否正確使用scanf有在由scanf("%d",&n)離開那裏,由第一fgetc

相同的讀取輸入流底線字符與scanf函數的結果呢?試試下面的(千萬不要錯過%c前的空格):

for(i = 0; i < n; i++) 
{ 
    printf("Enter %d character-->\n",i); 
    scanf(" %c", &arr[i]); 
} 
1

終端往往是行緩衝,這意味着流內容是一行一行地的基礎訪問。

因此,當fgetc從STDIN開始讀取時,它會讀取一個字符並保留換行符。所以你應該使用scanf(),即如Cubbi所建議的scanf(" %c", &arr[i]);。否則,您需要放棄該換行符。你可以使用這個

for(i = 0; i < n; i++) 
    {  
    printf("Enter %d character-->\n",i); 
    char ch = fgetc(stdin); // newline is consumed here 
    if(ch=='\n') 
     ch = fgetc(stdin);   // you get the expected value 
    arr[i] = ch; 
    //putchar(arr[i]);  
    } 
+0

更好的驗證一個換行符是在扔掉之前得到的。 – chux

+0

@chux進行編輯 – deeiip