[英]EOF in C doesnt work
我在從輸入中讀取字符時遇到問題。 當我按 ENTER 或 CTRL + Z 時,程序應該結束。
示例輸入:LoreCTRL+Z .... 正在循環,但是當我按 CTRL+Z 並且它之前沒有文本時,它可以工作。 有人可以幫我嗎? 謝謝
int intFromConsole = getchar();
if((intFromConsole == EOF) || (intFromConsole == '\n')){
//code
}
這可能與您的程序無關,而是與負責該行為的終端子系統(在內核中)有關。
您的終端通常處於“線路紀律”狀態。 請注意,您的程序不會直接接收“Lore”,而只會在您按回車鍵時接收。 (輸入是行緩沖的)。
另一個問題是,您通常不應該期望 Ctrl+Z (ASCII 26) 作為輸入,因為它在大多數終端狀態下被終端子系統攔截,這會暫停您的程序並將其發送到后台。
您可以從 Linus Akesson 的文章The TTY demystified 中獲得更多有趣的信息。
函數getchar()
使用緩沖輸入。 在 Windows 中, Ctrl-Z
僅在newline
條目newline
識別。 但在 Windows 中,您可能會在庫中使用conio.h
。 如果是這樣,這里有一些東西供您試驗。 它立即接受每個擊鍵,並以十六進制打印值。 當Ctrl-Z
時它會退出。
#include <stdio.h>
#include <conio.h>
#define ENDOF 0x1A // Ctrl-Z
int main(void) {
int ch;
do {
ch = _getch();
printf("%02X\n", ch);
} while(ch != ENDOF);
}
程序輸入
1234<Ctrl-Z>
程序輸出
31
32
33
34
1A
當我按 ENTER 或 CTRL + Z 時,程序應該結束。
如果以上是您想要的,您可以執行以下操作:
int main(void)
{
char ch;
do
{
while(ch!='\n')
getchar(); // waste the buffer
/* Do the useful stuff here */
ch=getchar();
}while(ch!=EOF && ch!='\n');
/* Note the logical operator is && . It says if the key pressed
* is neither Enter nor Ctrl -Z do some stuff.
* The program exits only when you directly press Enter key or
* Ctrl -Z / Ctrl -D. Okay ! Now it is time to take a nice walk
* thru the Grand Central Park.
*/
return 0;
}
對於 Linux 機器,Ctrl-Z 會生成無法捕獲的 SIGSTOP。 因此,要發出 EOF 信號,您應該改用 Ctrl-D。
參考 :
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.