[英]getchar() != EOF
我正在從C編程語言書中運行以下程序:
#include <stdio.h>
main()
{
int c;
while((c=getchar()) != EOF)
putchar();
}
要么
#include<stdio.h>
int main(){
int c = getchar();
while(c != EOF){
putchar(c);
c = getchar();
}
}
當我運行該程序時,出現無法解釋的行為。 如果我按以下順序從命令行輸入字符: {'h', 'e', 'l', 'l', 'o', '\\n', '^D'}
則得到以下響應打印到屏幕上: hello
,輸入\\n
后,一旦輸入^D
,程序便退出。
但是,當我按如下方式更改順序: {'h', 'e', 'l', 'l', 'o', '^D'}
,屏幕上顯示以下響應: hello
,但是程序不會退出。 輸入^D
是否應該退出? 我必須再次輸入^D
才能退出程序。 否則,僅當我在\\n
之后輸入^D
后程序才退出。 我不明白為什么無論何時輸入^D
,程序都不會退出。 有什么想法嗎?
我在UNIX系統上運行。
當您鍵入^ D(“傳輸結束”)時,輸入緩沖區將被清空,並且您到目前為止輸入的所有內容都會發送到您的程序中(實際上沒有發送^ D字符)。 它類似於鍵入換行符,但是,在這種情況下,也發送換行符本身。 程序讀取零個字符時,將其輸入視為關閉。 當您鍵入換行符后跟^ D或兩個連續的^ D時,會發生這種情況。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.