के बीच अंतर मैं जानना चाहता हूं कि fgets()
और scanf()
के बीच क्या अंतर है। मैं अपने मंच के रूप में सी का उपयोग कर रहा हूँ।स्कैनफ़() और fgets()
उत्तर
स्कैनफ सीमा जांच नहीं करता है। fgets शायद बेहतर विकल्प होने जा रहा है। फिर आप इसका मूल्यांकन करने के लिए sscanf() का उपयोग कर सकते हैं।
विषय यहाँ (मेरे बुराई जुड़वां इस- नहीं भूल मेरे लिए भाषण हो रही है कि गया था) http://cboard.cprogramming.com/c-programming/109243-scanf-vs-fgets.html
scanf, एक स्ट्रिंग आप में पढ़ा (या बनाई गई) को पार्स करता है के अच्छे चर्चा और fgets एक खुली फ़ाइल * से एक पंक्ति पढ़ता है। या आप fscanf मतलब है?
आप मानक इनपुट (कंसोल) से fgets के साथ पढ़ सकते हैं। –
कई अंतर हैं। दो महत्वपूर्ण हैं:
fgets()
किसी भी खुले फ़ाइल से पढ़ सकते हैं, लेकिनscanf()
केवल मानक इनपुट पढ़ता है।fgets()
फ़ाइल से 'टेक्स्ट की एक पंक्ति' पढ़ता है; इसके लिएscanf()
का उपयोग किया जा सकता है लेकिन संख्यात्मक प्रकारों में निर्मित स्ट्रिंग से रूपांतरणों को भी संभालता है।
बहुत से लोग fgets()
का उपयोग डेटा की एक पंक्ति को पढ़ने और फिर sscanf()
का उपयोग यह टुकड़े करना होगा।
int scanf(const char * restrict format, ...);
scanf (3) कुछ पैटर्न दिया stdin, जहां पैटर्न आप द्वारा परिभाषित किया गया है के रूप में जाना इनपुट पर प्रारूप तर्क द्वारा परिभाषित के लिए खोज करता है। दिए गए इनपुट स्कैनफ़ (3), इसके संस्करण (स्कैनफ़, fscanf, sscanf, vscanf, vsscanf, vfscanf) के आधार पर, एक स्ट्रिंग या फ़ाइल हो सकता है।
char *fgets(char * restrict str, int size, FILE * restrict stream);
fgets (3) बस इनपुट फ़ाइल धारा से एक लाइन पढ़ता है और बाइट्स दिया बाइट्स बफर करने के लिए बफर str के रूप में अशक्त समाप्त स्ट्रिंग कॉपी और उत्पादन की सीमा आकार में।
मुख्य अंतर यह है, तथ्य यह है कि scanf
अक्षर हैं जो पढ़ा जा सकता है (उसके डिफ़ॉल्ट उपयोग में) की संख्या पर कोई सीमा नहीं है में निहित है, जबकि fgets
कि पढ़ा जा सकता है चार की एक अधिकतम संख्या है।
चार * fgets (चार * गंतव्य, पूर्णांक आकार, फ़ाइल * धारा);:
दो कार्यों के प्रोटोटाइप देखें
int स्कैनफ़ (कॉन्स चार * प्रारूप, ...);
आप देख सकते हैं कि fgets
का दूसरा पैरामीटर अधिकांश आकार वाले char में पढ़ने के लिए लगाया जाता है।
एक और स्पष्ट अंतर वापसी मान है: fgets
वापसी dest
सफलता पर करने के लिए एक सूचक; scanf
सफलतापूर्वक मेल खाने और असाइन किए गए इनपुट आइटम की संख्या लौटाएं। फिर, scanf समारोह प्रारूप के अनुसार इनपुट को स्कैन करता है, और मानक इनपुट धारा stdin से इनपुट पढ़ता है, जबकि fgets
से डिफ़ॉल्ट के रूप में फ़ाइल * धारा इनपुट पढ़ता है।
निष्कर्ष में, आप फ़ाइल से डेटा पढ़ने के लिए scanf
का उपयोग कर सकते हैं और उन्हें एक निश्चित आकार सरणी (उदाहरण के लिए) में डालने का अधिक अर्थ नहीं है। scanf
का एक लाभ यह आउटपुट डेटा का स्वरूपण है: समारोह पढ़ता अगर 12345\n
, उत्पादन 12345
है, जबकि fgets पढ़ता है और रिटर्न तक \n
(शामिल है), एक स्ट्रिंग टर्मिनेटर के रूप में अंत में एक \0
जोड़ने।
यह ध्यान दिया जाना चाहिए कि scanf
पैटर्न चश्मा क्षेत्र चौड़ाई सीमा की अनुमति देते हैं:
scanf(" %80s", mybuffer);
लेकिन, जहां printf()
की अनुमति देता है चौड़ाई एक चर के रूप में प्रदान किया जाने वाला (साथ '*'):
printf("My name is %*s.\n", 20, name);
scanf()
नहीं करता है।
#define NAMEWIDTH 40
char buffer[ NAMEWIDTH + 4 ];
...
scanf(" %40x", buffer);
और कोई रास्ता नहीं क्षेत्र कनेक्ट करने के लिए साथ scanf()
में 40 चौड़ाई: यदि आप इस तरह की बातें कर रही अंत जिसका मतलब है (। यह '*' एक झंडा दबाने/क्षेत्र पूरी तरह से अनदेखी करने के लिए के रूप में व्याख्या) बफर घोषणा में बफर चौड़ाई 40।
- 1. स्कैनफ़
- 2. fgets
- 3. स्कैनफ़
- 4. चार * पी, और स्कैनफ़
- 5. fgets() सी
- 6. fgets और fscanf के बीच अंतर?
- 7. fgets() और fread() - क्या अंतर है?
- 8. गोलांग स्कैनफ़ त्रुटि
- 9. स्कैनफ़() स्कैन चर (
- 10. उपयोगकर्ता इनपुट को स्वीकार करने के लिए स्कैनफ़ का उपयोग
- 11. getchar_unlocked() वीएस स्कैनफ़() वीएस सीएन
- 12. क्या स्कैनफ़() 'पिछले स्कैनफ़() से इनपुट बचे हुए के रूप में' \ n 'लेता है?
- 13. सी fgets बनाम fgetc पढ़ने के लिए
- 14. fgets 'परिणाम के बाद स्वचालित स्थान?
- 15. रूबी स्कैनफ़ इतना धीमा क्यों है?
- 16. सरल सी स्कैनफ़ काम नहीं करता है?
- 17. स्कैनफ़ काम नहीं कर रहा है। कंसोल
- 18. सी में फ़ाइल से एक विशिष्ट रेखा fgets() कैसे करें?
- 19. fgets से तेजी से इनपुट की एक पंक्ति पढ़ें?
- 20. स्कैनफ़ इनपुट इनपुट छोड़ने के लिए क्यों दिखाई देता है?
- 21. fgets समस्या को लंबे समय तक पढ़ना() लिनक्स
- 22. fgets() के साथ stdin से कैसे पढ़ा जाए?
- 23. आंतरिक रूप से fgets कैसे काम करता है?
- 24. स्कैनफ़() (सी भाषा) ने मुझे भ्रमित कर दिया
- 25. जांचें कि क्या स्कैनफ़ का मान एक नंबर है?
- 26. मैं PHP में fgets फ़ंक्शन से लाइन ब्रेक को कैसे हटा सकता हूं?
- 27. एक स्ट्रिंग अक्षर पर लिखते समय स्कैनफ़ अपेक्षित रूप से क्यों काम नहीं कर रहा है?
- 28. फ़ाइल स्ट्रीम में कोई नया डेटा नहीं होने पर fgets ब्लॉक को कैसे रोकें
- 29. fgets स्वाभाविक रूप से सी में एक समाप्ति शून्य डालता है?
- 30. क्या fgets() हमेशा चार बफर को \ 0 के साथ समाप्त कर देता है?
संख्यात्मक प्रकारों के लिए, scanf() को सीमाओं की जांच करने की आवश्यकता नहीं है। स्ट्रिंग प्रकारों के लिए, आप सीमा जांच करने के लिए scanf() बता सकते हैं। –