2012-01-01 25 views
9

आज, मैं getchar() का उपयोग करता है वर्ण आप इनपुट गिनती करने के लिए कोड का एक सरल टुकड़ा लिखा था। लेकिन जब मैं इसे सिगविन पर संकलित करता हूं, तो यह काम नहीं करता है। यह हमेशा 0 प्रिंट, लेकिन मैं कभी नहीं इनपुट कुछ भी या मैं नहीं कर सकते इनपुट कोई भी वर्ण यह 0.getchar() सही क्यों काम नहीं करता है?

प्रिंट हालांकि, अगर मैं इसे कुलपति ++ 6.0 के साथ संकलन, यह काम करता है।

#include<stdio.h> 
int main(void) 
{ 
long nc; 

nc = 0; 
while(getchar() != EOF) 
    ++nc; 
printf("The total of characters you inputed is %ld.\n", nc); 
return 0; 
} 
+1

क्या आप cygwin पर संकलित करने के लिए प्रयोग कर रहे हैं? मेरे पास साइगविन है और संकलन करने के लिए वीसी का उपयोग करें और यह ठीक काम करता है। – hmjd

+3

आपका सटीक कोड साइगविन (जीसीसी के साथ संकलित) में मेरे लिए पूरी तरह से काम करता है। ईओएफ भेजने के लिए आपको नियंत्रण-डी हिट करना होगा। –

+1

कैसे * आप * प्रोग्राम चला रहे हैं? क्या होता है जब आप 'echo हैलो | ।/your_program' एक सिग्विन बाश खोल प्रॉम्प्ट से? क्या होगा यदि आप केवल '।/Your_program' टाइप करते हैं, फिर' हैलो 'टाइप करें, फिर एंटर करें, फिर कंट्रोल-डी? –

उत्तर

0

This email thread एक बग है कि इतना तुम्हारा की तरह लगता है के बारे में बात करती है, लेकिन मैं इसे करने के लिए कोई अनुवर्ती देखते हैं कि नहीं देख सकता।

मैं जानना चाहता हूँ कि क्या हुआ जब आप

while(getc(stdin) != EOF)

कोशिश रुचि होगी और है कि अगर काम नहीं करता है, हालांकि this पेज, कोशिश while(fgetc(stdin) != EOF)

वे सब के सब काम करना चाहिए सुझाव देता है कि इन कार्यों के बीच कार्यान्वयन अंतर हो सकता है।

एक और बात आप की कोशिश कर सकते कि तुम क्या मिल के ASCII मूल्य मुद्रित करने के लिए है:

printf("%d\n",(int)getchar());

इसके अलावा, कंसोल में उसे लिखने के बजाय एक फ़ाइल से पाइपिंग उत्पादन का प्रयास करें। एक फ़ाइल input.txt बनाएँ, उस में कुछ अक्षर रखा, और कर

cat input.txt | ./program

संपादित करें: आप बिल्ली चल रहा है और पाइप लिखने यह काम करता है। मैं बस अपने सिग्विन संस्करण को अपडेट करूँगा। आपको एक बग का सामना करना पड़ा है। सिग्विन और कंपाइलर के नवीनतम संस्करण प्राप्त करें, और आपको जाने के लिए अच्छा होना चाहिए। एक और विकल्प scanf का उपयोग करना है।

+0

जबकि (getc (stdin)! = ईओएफ) और wihle (fgetc (stdin)! = ईओएफ) भी काम नहीं करते हैं। और "printf ("% d \ n ", (int) getchar());" प्रिंट '-1'। लेकिन मैं cat input.txt के बारे में curios | ./a यह अच्छी तरह से चलता है। लेकिन मैं इसे समझ नहीं पा रहा हूं, यह अच्छी तरह से क्यों चल सकता है। – yunfeng

+0

अपने टूल्स अपडेट करें। :) इसके अलावा, सिग्विन खोल के बजाय cmd.exe का उपयोग कर प्रोग्राम चलाने का प्रयास करें। क्या वह काम करता है? –

+0

मेरा सिगविन [लिंक] (http://www.cygwin.com/) है, इसलिए मुझे लगता है कि यह नवीनतम संस्करण है लेकिन मैं इसे चलाने के लिए cmd.exe का उपयोग करता हूं। यह सही तरीके से काम करता है। – yunfeng

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