簡體   English   中英

在C中遇到數組指針問題

[英]Having trouble with array pointer in C

嗨,大家好,我是C語言的初學者,在測試數組指針和分配動態內存時遇到了麻煩。

int x,i=0;
char *myChar;

printf("Please enter the length: ");
scanf("%d",&x);
myChar = (char*)malloc(x*sizeof(char));
printf("Please enter %d characters:",x);
for(i=0;i<x;i++){
    scanf("%c ",&myChar[i]);
}

for(i=0;i<x;i++){
    printf("%c",myChar[i]);
}
free(myChar);

如果我輸入5作為長度,並輸入“ hello”作為字符數組,那么我得到的是“ hell”而不是“ hello”,這不好玩。 有人可以幫助我嗎? 謝謝

問題是您的scanf()將其更改為

scanf(" %c",&myChar[i]);

%c之前的空格將占用緩沖區中的換行符,這是因為在x的值之后使用enter鍵,否則循環中的%c將按此方式獲取換行符。 因此, %c前面不能有空格。

最可能的罪魁禍首是以下scanf調用:

scanf("%c ",&myChar[i]);

將其更改為以下內容:

scanf(" %c", &myChar[i]);

請注意,我將空格切換到%c轉換說明符之前。

這就是發生的情況:輸入數組大小時,輸入流將包含以下字符: '5' '\\n' 第一個scanf調用使用'5'並將'\\n'留在輸入流中。

當您輸入hello ,輸入流將包含'\\n' 'h' 'e' 'l' 'l' 'o' '\\n' 下一個scanf調用從輸入流中讀取'\\n'並將其分配給myChar[0]因為%c不會跳過前導空格。 因此,您最終從輸入流中讀取了'\\n' 'h' 'e' 'l' 'l' myChar '\\n' 'h' 'e' 'l' 'l'並將它們分配給myChar數組。

通過在%c轉換說明符之前放置空格,可以告訴scanf跳過所有前導空格並使用下一個非空格字符。

第一個scanf不會吃掉用於完成長度輸入的返回鍵,因此它將成為您讀取的x字符中的第一個,因此不會讀取最后一個字符。 @Gopi的修復程序將解決此問題。

你也可以打電話

fflush (stdin); 

第五行之后

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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