2014-09-23 145 views
-1

我想知道,爲什麼在我的打印結束時總是有10個。打印char數組後,爲什麼會出現10?

我想輸入一個字符串的空格,然後打印出所有的字符。

輸入:hello

輸出:104 101 108 108 111 10

應該輸出:104 101 108 108 111

unsigned char input[256]; 
    fgets(input,sizeof(input),stdin); 

    for(int i = 0; input[i] != '\0'; i++) { 
    printf("%u ",input[i]); 
    } 
+1

嗯,當你鍵入...時,注意你的手指是他們碰到'o'還是別的什麼的最後一個鍵? – 2014-09-23 19:23:57

+0

答案提到10是爲ENTER鍵傳遞的字符的編碼是正確的,除了它們引用ASCII。我們不知道你的控制檯正在使用什麼字符集和編碼,但它可能不是ASCII。按照設計,許多字符集是ASCII的超集,其大部分編碼與公共子集的ASCII相同。通過Linux中的'locale'和Windows中的'chcp'找出你真正使用的是什麼。並且,請記住,您的程序的使用可能會使用不同的東西。 – 2014-09-23 23:47:50

回答

8

10是換行。 fgets消耗換行符將其複製到緩衝區。從the docs

如果發現文件結束或發現換行符,解析將停止,在這種情況下,str將包含該換行符。

該文檔是您的朋友。

1

您正在打印換行符。

打印出來時,這表示爲數字10(ASCII)。

1

'\n'的端部具有代碼10。

請注意,打印出6個數字。我打賭你鍵入6鍵:

^hË大號大號Ø輸入

所以輸入不是 「你好」,但'h''e''l''l''o''\n'

fgets()閱讀這6個並保存在input[]。它還附加了一個'\0',所以保存了7 char

相關問題