2011-07-05 17 views
7
#include <stdio.h> 
int main(int argc, char* argv[]) { 
    char c; 
    scanf(" %c", &c); 
    printf("%c\n", c); 
    return 0; 
} 

[[email protected]]# ./scanf 
a 
a 

[[email protected]]# ./scanf 
h 
h 

ऐसा लगता है कि अंतरिक्ष मौजूद है या नहीं, क्यों?स्कैनफ़ाफ़ में स्थान का क्या अर्थ है?

+1

http://linux.die.net/man/3/scanf, http://www.manpagez.com/man/3/scanf/, http://unixhelp.ed.ac.uk/CGI/ मैन-सीजीआई? स्कैनफ + 3, जीआईवाईएफ – sehe

उत्तर

9

व्हाइट अंतरिक्ष प्रारूप स्ट्रिंग में (जैसे कारतूस, टैब, या नई-पंक्तियों के रूप में) कोई भी सहित सफेद स्थान की किसी भी राशि से मेल खाते हैं,, इनपुट में।

http://www.manpagez.com/man/3/scanf/

+0

क्या यह 'रिटर्न' कुंजी से मेल खाता है? –

+1

@ जे रोज: यह "चाबियाँ" से मेल नहीं खाता है। यह इनपुट * अक्षर * से मेल खाता है। और न्यूलाइन चरित्र को व्हाइटस्पेस माना जाता है, इसलिए हाँ, यह न्यूलाइन चरित्र को छोड़ देगा। – AnT

+0

हां, स्पेस का उपयोग "न्यूलाइन" से मेल खाने के लिए किया जा सकता है। सावधान रहें, जब आप रिटर्नर्न हिट करते हैं, तो यह आमतौर पर "\ r \ n" और लिनक्स में केवल "\ n" भेजता है। लेकिन सरल संख्यात्मक इनपुट स्कैन के लिए, जो आमतौर पर कोई फर्क नहीं पड़ता क्योंकि जैसे ही यह स्कैनिंग इनपुट के प्रकार के आधार पर संख्या रूपांतरण एक गैर-अंक ('.'' -' और '+' को हिट करता है, बंद हो जाता है) –

4

scanf में अंतरिक्ष प्रारूप का मतलब है पर वर्तमान स्थिति से "सभी खाली स्थान के छोड़"। चूंकि अधिकांश scanf स्वरूप विनिर्देशक कुछ भी पढ़ने की कोशिश करने से पहले सभी व्हाइटस्पेस को पहले ही छोड़ देगा, अंतरिक्ष का उपयोग अधिकांश समय scanf प्रारूप में नहीं किया जाता है। हालांकि, जब आप एक प्रारूप विनिर्देशक का उपयोग कर रहे हैं जो व्हाइटस्पेस को अनदेखा नहीं करता है, तो आवश्यक होने पर प्रारूप में स्थान सहित (छोड़ने के लिए बल) समझ में आ सकता है।

विनिर्देशक जो व्हाइटस्पेस को अनदेखा नहीं करते हैं c[ और n हैं। तो, उन विनिर्देशकों में से एक के सामने एक जगह निर्दिष्ट करना एक फर्क पड़ता है। अन्यथा, इससे कोई फर्क नहीं पड़ता है। आपके विशिष्ट उदाहरण में, व्हाइटस्पेस को विशेष रूप से अनदेखा किया जाता है क्योंकि आपने अपने scanf प्रारूप में एक स्थान का उपयोग किया है (क्योंकि आप %c का उपयोग कर रहे हैं)। अंतरिक्ष को हटाने का प्रयास करें और देखें कि क्या होता है।

0

अंतरिक्ष का मतलब केवल एक स्थान इनपुट के रूप में स्वीकार किया जाता है। आप इस संबंधित थ्रेड को fgets के बजाय स्कैनफ़ का उपयोग करने के खतरों पर पढ़ना चाहेंगे।

How do you allow spaces to be entered using scanf?

2

प्रारूप स्ट्रिंग में एक खाली स्थान के चरित्र 0 या अधिक इनपुट से खाली स्थान के अक्षर, पहले गैर-सफ़ेद चरित्र जब तक ध्यान नहीं देगा।

1

documentation for scanf का कहना है:

एक या अधिक सफेद-अंतरिक्ष पात्रों से बना एक निर्देश इनपुट को पढ़ कर, या पहली बाइट जो एक नहीं है करने के लिए क्रियान्वित किया जाएगा जब तक कोई और अधिक मान्य इनपुट पढ़ा जा सकता है सफेद अंतरिक्ष चरित्र, जो अपठित बनी हुई है।

और यह भी

इनपुट सफेद-अंतरिक्ष वर्ण (के रूप में isspace द्वारा निर्दिष्ट), को छोड़ दिया जाएगा जब तक रूपांतरण विनिर्देश एक [, सी, सी, या n रूपांतरण विनिर्देशक भी शामिल है।

जिसका अर्थ है कि आपकी प्रारूप स्ट्रिंग में स्थान की आवश्यकता है। आप एक पूर्णांक को पढ़ने के लिए जा रहे थे अगर, हालांकि, अंतरिक्ष बेमानी हो गया होता:

/* equivalent statements */ 
scanf(" %d %d %d", &v1, &v2, &v3); 
scanf("%d%d%d", &v1, &v2, &v3); 
0

% c खाली स्थान के चार को छोड़ नहीं होगा सांख्यिक फ़ॉर्मेट विनिर्देशक करते हैं। तो अगर आप का उपयोग करें:

#include<stdio.h> 
int main(int argc, char* argv[]){ 
    char c; 
    scanf("%c", &c); 
    printf("%c\n", c); 
    scanf("%c", &c); // Try running with and without space 
    printf("%c\n", c); 
    return 0; 
} 

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

fflush(stdin); 
scanf("%c" &c); 

लेकिन यह बहुत बुरा प्रोग्रामिंग माना जाता है सी स्टैंडर्ड fflush के व्यवहार (stdin) निर्दिष्ट के रूप में अनिर्धारित रहता है। इसलिए प्रारूप स्ट्रिंग में हमेशा स्पेस का उपयोग करें जब तक कि आपके पास व्हाइटसाइट्स को अच्छी तरह से कैप्चर करने का कोई विशिष्ट कारण न हो।

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