2014-10-28 55 views
-1

考慮這個線程What is EOF in the C programming language?爲什麼Ctrl-J和Ctrl-M在OSX的c編程中返回10?

答案是EOF(按Ctrl-d)成果在getchar返回-1

  • 我的問題是什麼按Ctrl-J和Ctrl-M代表C對OSX以及爲什麼getchar返回10都使用與上面鏈接相同的代碼?
  • 什麼其他快捷鍵(Ctrl-somthing/Cmd-something)導致getchar變成一個靜態預定義數字?
+0

你在做什麼,以便MacOS X返回任何東西?要更精確一點。我們無法讀懂你的想法。 – gnasher729 2014-10-28 13:46:08

+0

只需在線程中使用其他快捷方式測試相同的代碼即可。我使用快捷鍵作爲控制程序流程的另一種方式。我只是好奇10從何而來,以及Ctrl-J/M是否總是返回10,以及是否有其他快捷方式。 – userjuicer 2014-10-28 13:48:39

+2

請仔細閱讀其他答案。它沒有說'EOF(Ctrl-D)返回-1',相反。它表示按下鍵盤序列'Ctrl-D'表示流的結束,然後使'getchar'返回'EOF'。 'EOF'是一個特殊的值,用於通知呼叫者文件結尾到達。通常這個'EOF'值是'-1',但可以是任何其他負值。 – 2014-10-28 14:06:59

回答

1

stdin通常在文本模式。在文本模式下讀/寫時,每個操作系統會發生各種轉換,涉及行結尾。 Crtl-M就是其中之一 - 它被轉換爲10.如果IO處於二進制模式,則不會有轉換。

控制檯將各種鍵盤組合映射到各種char和動作(如Ctrl-D→EOF)。當然,創建的各種char包括大多數值0到127.由於這些值通常映射到ASCII,前32個值(Ctrl- @,CTRL-A,CTRl-B,... Ctrl-_),它們可以沒有圖形表示

注意:注意getchar()在返回EOF後再次被調用時會返回什麼。期待它再次立即返回EOF而不用等待任何額外的按鍵。 (Ctrl-D)設置一個條件,而不是一個字符。

3

按Ctrl-J爲換行控制字符中的快捷方式,其具有字符代碼10 Here與其它控制字符

一個頁I作爲此時不知道爲什麼按Ctrl-M( ASCII值13)返回10,但認爲它是由於它在功能上與換行相似。

EOF返回-1的原因是因爲它在大多數系統上的值爲-1。

一些其他定義的字符:
按Ctrl-G:7
按Ctrl-I:9
...
Ctrl-V鍵:22

+0

+1。爲Ctrl-M添加更多信息。 – user1336087 2014-10-28 13:53:26

+0

謝謝,但我主要對回報感興趣。請參閱上面的鏈接。在OSX上,Ctrl-D總是返回-1。是否有其他捷徑總是返回預定義的數字? – userjuicer 2014-10-28 13:54:15

+0

@userjuice如果你按照提供的鏈接,你會發現控制代碼和這些的歸因整數值。 – 2014-10-28 14:12:03

相關問題