簡體   English   中英

getchar()在C中將'10'讀為'1'和'0'

[英]getchar() reads '10' into '1' and '0' in C

我正在使功能像

輸入內容包括:“ 1 2 3 4 5 6 7 8 9 10 \\ n”

函數輸出:“ {1、2、3、4、5、6、7、8、9、10} \\ n”

我想看看getchar()的工作原理,所以我寫了這樣的函數:

    int c ;

    printf("{");

    while ((c = getchar()) != EOF) {
            printf("%c, ", c);
            getchar();

    }
    getchar();
    printf("}\n");

當我輸入“ 1 2 3 4 5 6 7 8 9 10 \\ n”時,它顯示為:

{1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 
 , }

我猜里面的緩沖區有問題。 也許getchar()逐字符讀取和讀出字符,以便將10分別視為1和0?

我查詢了過去的一些問題,但沒有得到。 感謝您的見解。

是的,您是對的-令人驚訝的是它按其名稱所說的進行操作-它逐字符輸入。 這里的'1'是一個字符, '0'是另一個。

也有不同的處理方法-您可以根據這些字符自行形成數字(每當看到一個空格時,您就會知道您已經看到一個數字並且可能會跳過多個空格)或一次換行使用strtok獲取以空格分隔的數字,然后使用strtol進行轉換。

輸入流是一個字符序列-不是整數,不是浮點數,不是字符串,只是字符。 當您鍵入類似1 2 10內容時,輸入到輸入流中的是字符序列{'1', ' ', '2', ' ', '1', '0', '\\n' } getchar只是從該字符序列中讀取下一個字符。

請注意,在循環中,您兩次調用getchar並丟棄所有其他輸入,這就是為什么尾隨0不會出現的原因。

如果你想詮釋的字符序列'1' '0'為整數值10 ,那么你要么需要緩沖那些人物和他們自己轉換為一個整數值,或使用scanf%d轉換符:

int value;

putchar( '{' );
while ( scanf( "%d", &value ) == 1 )
  printf( "%d, ", value );
printf( "}\n" );

暫無
暫無

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

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