2013-08-28 68 views
4

值中的代碼:預期程序打印的EOF

#include<stdio.h> 

int main() 
{ 
    int t; 
    for(;scanf("%d",&t);printf("%d",t)); 

} 

程序運行正常時我給一般intergers作爲輸入。我在Windows上工作,所以當我將scanf Cntrl + Z插入參數t時,我沒有在標準輸出中得到EOF的值,即-1,但存儲在它之前的參數。 也當我按Cntrl + D程序終止時,爲什麼Cntrl + D導致scanf返回0?

爲什麼在scanf Cntrl + C我的編譯器說:「進程終止狀態-107 ......」 我不明白爲什麼會發生這種情況?請幫忙。

回答

6

scanf返回匹配成功的格式說明符的數量,或者如果在匹配(或未匹配)第一個說明符之前達到輸入的結尾,則返回EOF

按Ctrl + Z時,scanf到達輸入的末尾並返回EOF(因爲Ctrl + Z在Windows上終止輸入)。這不會終止您的for循環,因爲EOF非零,因此打印的前一個值爲t(因爲t未被調用更改)。請注意,t在輸入結束時將不會收到值EOF,因爲您似乎期望:scanf返回EOF作爲返回值,它不會將它寫入傳遞給它的指針中。

當你按下Ctrl + D時,它被視爲任何其他字符。由於它是非數字的,因此會導致%d說明符的匹配失敗,而scanf返回0,從而終止循環。

+0

和我的編譯器說:「過程終止狀態-107 ......」當我scanf cntrl + C.這是爲什麼? – amiageek

+2

@amiageek按Ctrl + C或Ctrl + Break會導致程序終止。 – interjay

0

嘗試此代碼,並且如果您曾經按CTL + Z(Linux上的CTL + D)將會給你零。否則打印1

#include <stdio.h> 
main() 
{ 
     int c; 

     while(c=getchar()!=EOF) //here get the character and then compares with the EOF if Not equal 1 will assign to c , if equal 0 will assign to c. 
       printf("%d",c); 
       printf("%d",c);//when ever we press ctl+Z(ctl+d on linux) then it will print zero remaing all cases this statement wont execute 
getchar(); 
} 
+1

Ctrl + D在Windows上不會導致EOF。 – interjay

+0

@interjay編輯我的回答。謝謝。 – Gangadhar