簡體   English   中英

如何在循環中使用scanf在C中獲取char *數組

[英]How to use scanf in a loop to get a char* array in c

我想使用scanf獲得一個char數組值。 我使用以下代碼:

    // get first array
    printf("first length:\n");
    scanf("%d", &f_l);
    printf("first number:\n");
    for(i=0 ; i<=f_l ; i++) {
        scanf("%c", &first[i]);
    }
    //start test
    printf("first number is:\n");
    for(i=0 ; i<=LEN ; i++) {
        printf("(%c | %d)", first[i],i);
    }

但是,當我打印數組時,我首先找到一個\\nfirst[0] ),而其他字符從place[1]開始! 為什么會這樣,以及如何解決?

這是因為當對f_l進行scanf()時,緩沖區中保留了一個'\\n'

使用尾隨空格,它應該可以工作

for(i=0 ; i<=f_l ; i++) {
    scanf(" %c", &first[i]);
}

在您的代碼中

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

讀取並存儲先前輸入的換行符( \\n )。 你需要改變

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

scanf(" %c", &first[i]);
       ^
       |

為了避免先前的ENTER鍵生成的先前輸入的換行符( \\n )。 %c之前的前導空格將導致scanf() 忽略任何數量的前導空白字符(包括換行符),並讀取第一個非空白字符(預期輸入)。

也就是說,直接使用用戶提供的值對預定義數組進行數組索引可能會出現問題。 至少要檢查用戶輸入的值是否小於定義的數組大小。

暫無
暫無

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

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