鍍金池/ 問答/C/ C 的 EOF 問題

C 的 EOF 問題

void charCopyandCount()
{
    int c;          
    while((c = getchar()) != EOF)          
    {
        putchar(c);
    }
}

輸入 abcd^Z 并沒有結(jié)束,在輸入 ^Z 就結(jié)束了,并顯示 abcd;
為什么第一個 ^Z 沒有當(dāng)成 EOF (并且把換行吃掉了?)而第二個 ^Z 當(dāng)成 EOF 處理了呢?

回答
編輯回答
默念

^Z并不是 EOF (在LINUX下是^D),它只是一個終端的控制字符,和回車的作用很像,不過行為有些不同。
回車將當(dāng)前終端的內(nèi)容以及回車送入到文件描述符
^Z將當(dāng)前終端的內(nèi)容送入到文件描述符,不包括^Z
EOF這個東西其實不存在,它指的是 讀文件時讀不到下一個字符這種 狀態(tài),即讀不到東西就返回EOF
所以當(dāng)你什么都沒輸入的時候,輸入^Z就回直接退出循環(huán)

2017年11月15日 06:35