2010-10-26 27 views
1

我在輸入字符類型時遇到了麻煩,我的源代碼的行爲並不常見。在c中輸入字符類型的問題

代碼是:

int n,i; 
char *ps; 

printf("Total no:"); 

scanf("%d",&n); 

ps=(char *)calloc(n,sizeof(char)); 

for(i=0;i<n;i++) { 
    printf("Enter character %d:",i+1); 
    scanf("%c",ps+i); 
} 

然後按我的要求,應採取輸入完全沒有。的n,但它不能正常工作,它不會在第一次循環運行時接受任何輸入,那麼當循環運行2次,然後在4次時輸入 等等。

所以請告訴我我的代碼有什麼錯誤?

- 預先感謝。

回答

1

您的scanf調用不包含換行符,所以當您輸入「5 [enter]」作爲輸入時,第一個scanf讀入「5」,第二個讀取換行符。嘗試改變你的scanf調用看起來像scanf("%d\n", &n)scanf("%d%*c", &n)顯式處理換行符。

4

循環內的每個呼叫scanf都會讀取下一個字符。如果輸入,例如:

Total no:輸入

然後第一個scanf將讀取4int,但輸入將在下一個scanf(內循環)可以看出作爲換行符,\n

將第一個呼叫更改爲scanf("%d\n", &n),將回路內的呼叫更改爲scanf("%c\n",ps+i)