main()
{
int c;
while ((c = getchar()) != EOF)
{
putchar(c);
}
}
我知道getchar()
緩衝了字符。如果我執行這個程序並輸入一些字符如Hello
而沒有按回車我按EOF
字符爲什麼它再次打印Hello
並要求新角色?c中的getchar()在使用它時
main()
{
int c;
while ((c = getchar()) != EOF)
{
putchar(c);
}
}
我知道getchar()
緩衝了字符。如果我執行這個程序並輸入一些字符如Hello
而沒有按回車我按EOF
字符爲什麼它再次打印Hello
並要求新角色?c中的getchar()在使用它時
當您鍵入'EOF'字符時,終端驅動程序會使輸入緩衝區中的所有字符都可用於程序,即使您沒有鍵入換行符。由於getchar()
下面的代碼得到了一些字符,它不在EOF中。當你鍵入第二個'EOF'時,沒有剩餘字符需要發送(但終端驅動程序讓read()
函數知道有0個字節可用),所以read
得到0字節返回,這表明EOF。
這是因爲在輸入完整行之前,程序沒有收到shell的輸入。直到它被存儲在終端程序的緩衝區中。默認情況下,終端將緩存所有信息,直到按下ENTER鍵,然後纔將其發送到C程序。
但是當我按下第一個EOF時,爲什麼它像我按Enter鍵一樣。 – Rohit
就像getchar
填充一個緩衝區,然後「讀取」一個字符,putchar
打印字符時也會做同樣的事情。要在一次I/O中執行字符,您需要以非緩衝模式打開輸入和輸出流。但是,這可能非常低效,特別是如果程序輸入和輸出直接從文件或管道讀取和寫入。相反,在可能的情況下使用緩衝輸入和輸出,或者每當確實需要寫入輸出時(無論I/O緩衝區是否已滿),都要對flush
任何輸出流進行明確調用。
_I按EOF character_意味着你做了什麼? –
'EOF',在窗口中它是'CTRL + Z'。而在Linux中,它將會是'CTRL + D' – Rugal
我按下ctrl + D – Rohit