簡體   English   中英

使用c讀取包括空格的整行

[英]reading an entire line including spaces using c

我正在嘗試從用戶讀取包括空格在內的整行,但是現在我的代碼僅在for循環的第一次迭代中才正確執行scanf。 之后,它僅打印x 9次,而不是再次詢問用戶更多的輸入。 好像在隨后的迭代中沒有調用scanf,為什么? 我怎樣才能解決這個問題? 我的代碼如下。 謝謝

#include <stdio.h>
#include <stdlib.h>

int main(){
    char x[1024];
    for (int n=0; n<10; n++){
        scanf("%[^\n]s",x);
        printf("x = %s\n",x);
    }

scanf系列存在許多問題,包括將項目留在緩沖區中,然后它將繼續重新讀取。 那就是你正在發生的事情。 如果您不需要使用它,請不要使用它。

使用fgets讀取整行。 然后,如果要解析該行,請進一步使用sscanf

char line[BUFSIZ];
while( fgets(line, sizeof(line), stdin) != NULL ) {
    ...
}

scanf("%[^\\n]s",x)讀取除\\n以外的所有內容。 這意味着在第一次讀取后,它將把\\n留在緩沖區中,這樣每次連續讀取都不會讀取任何內容(這就是x保持原樣的原因)。

對於在線閱讀(即對\\n進行正確處理),通常更適合使用fgets 而且,當您想要擺脫\\n字符(它將成為fgets讀取的字符串的一部分)時,可以使用strcspn

int main(){
    char x[1024];
    for (int n=0; n<10; n++){
        if (!fgets(x,1024,stdin)) {
           break;
        }
        x[strcspn(x,"\n")]='\0';
        printf("x = %s\n",x);
    }
}

暫無
暫無

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

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