2013-01-09 13 views
7

मैं किताब पढ़ रहा हूँ "सी प्रोग्रामिंग भाषा" और वहाँ एक व्यायाम है कि सत्यापित करने के लिए अभिव्यक्ति getchar() != EOF 1 या 0. लौटा रहा है अब मूल कोड इससे पहले कि मैं करने के लिए कहा गया था पूछा है कि था:मुझे सीओ में ईओएफ का मूल्य क्यों नहीं मिल सकता है?

int main() 
{ 
    int c; 
    c = getchar(); 

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

तो मैं यह करने के लिए बदल रहा है सोचा:

int main() 
{ 
    int c; 
    c = getchar(); 

    while (c != EOF) 
    { 
     printf("the value of EOF is: %d", c); 
     printf(", and the char you typed was: "); 

     putchar(c); 
     c = getchar(); 
    } 
} 

और किताब में जवाब है:

int main() 
{ 
    printf("Press a key\n\n"); 
    printf("The expression getchar() != EOF evaluates to %d\n", getchar() != EOF); 
} 

Cou ld कृपया मुझे बताएं कि मेरा तरीका क्यों काम नहीं करता?

+1

मैं इस काम के किसी भी * को * # शामिल 'फ़ाइलों के साथ आश्चर्यचकित हूं। – WhozCraig

+0

यह सब निश्चित रूप से – MNY

+1

के साथ है, यह अभ्यास आपको 'getchar()! = EOF' का मान पूछता है, न कि' getchar() 'के मान। – effeffe

उत्तर

5

क्योंकि अगर cEOF, है while पाश समाप्त (या यहां तक ​​कि, शुरू नहीं होगी अगर यह पहले अक्षर टाइप किया पर पहले से ही EOF है)। लूप का एक और पुनरावृत्ति चलाने की स्थिति यह है कि cEOF नहीं है।

4

EOF

#include <stdio.h> 
int main() 
{ 
    printf("EOF on my system is %d\n", EOF); 
    return 0; 
} 

EOF का मूल्य प्रदर्शित करने के लिए अपने कार्यक्रम आप ग = getchar के रूप में एसटीडी इनपुट से चरित्र में पढ़ रहे हैं -1

-2

() के रूप में सामान्य रूप से stdio.h में परिभाषित किया गया है;

इस तरह आप कुंजी दबाए गए एसीआईआई मूल्य प्राप्त कर सकते हैं, जो कभी भी ईओएफ के बराबर नहीं होगा।

क्योंकि ईओएफ फ़ाइल का अंत है।

बेहतर आप फ़ाइल को किसी भी मौजूदा फ़ाइल को खोलने और फ़ाइल से पढ़ने की कोशिश करते हैं, इसलिए जब यह फ़ाइल के अंत (ईओएफ) तक पहुंच जाता है, तो यह थोड़ी देर लूप छोड़ देगा।

अच्छी तरह से किताब में जवाब है:!

int main() 
{ 
    printf("Press a key\n\n"); 
    printf("The expression getchar() != EOF evaluates to %d\n", getchar() != EOF); 
} 

कोशिश कार्यक्रम को समझने के लिए, यह एक महत्वपूर्ण है, जो EOF के बराबर है, तो यह हमेशा "प्रिंट चाहिए अभिव्यक्ति getchar() नहीं होगा हो जाता है = ईओएफ 0 का मूल्यांकन करता है "।

आशा है कि यह मदद करता है .......

+1

मानक ASCII का उपयोग नहीं करता है, लेकिन अधिक महत्वपूर्ण है, फ़ाइल के अंत में 'getchar' रिटर्न' EOF' और यह मान वास्तव में 'c' में सहेजा जाता है, इसलिए हम' c' घोषित करते हैं 'char' के बजाय' int' के रूप में। इसलिए, पुस्तक का जवाब दोनों '0' या' 1' प्रिंट कर सकता है। वैसे भी, यदि चरित्र 'ईओएफ' से अलग है, तो उसे '1' मुद्रित करना चाहिए, न कि' 0'। – effeffe

3

EOF Windows में चाबियाँ Ctrl + D यूनिक्स में और CTRL + C दबाकर कीबोर्ड के माध्यम से शुरू किया जा सकता।

नमूना कोड:

void main() 
    { 
      printf(" value of getchar() != eof is %d ",(getchar() != EOF)); 
      printf("value of eof %d", EOF); 
    } 

आउटपुट:

[[email protected] prac]# ./a.out 
a 
value of getchar() != eof is 1 value of eof -1 
[[email protected] prac]# ./a.out 
Press ctrl+d 
value of getchar() != eof is 0 value of eof -1[[email protected] prac]# 
+0

मेरा मानना ​​है कि नियंत्रण-सी विंडोज पर बाधित है; नियंत्रण-जेड ईओएफ संकेत है। –

1
Here is my one, 
i went through the same problem and same answer but i finally found what every body want to say. 
System specification :: Ubuntu 14.04 lts 
Software :: gcc 


yes the value of EOF is -1 based on this statement 
printf("%i",EOF); 

but if your code contain like this statement 
while((char c=getchar)!=EOF);; 
and you are trying to end this loop using -1 value, it could not work. 

But instead of -1 you press Ctrl+D your while loop will terminate and you will get your output. 
0

यह सी = EOF बजाय!। क्योंकि आप अभिव्यक्ति के परिणाम मुद्रित करना चाहते हैं, न कि चरित्र।

संबंधित मुद्दे