![](/img/trans.png)
[英]make a program in c that reads string of characters with getchar and print it with putchar
[英]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.