2012-05-03 2 views
21

का उपयोग करके अंतरिक्ष द्वारा अलग संख्याओं को कैसे पढ़ा जाए, मैं scanf() फ़ंक्शन का उपयोग करके रिक्त स्थान से अलग संख्याओं (पूर्णांक प्रकार) को पढ़ना चाहता हूं। निम्नलिखितस्कैनफ़

C, reading multiple numbers from single input line (scanf?)
how to read scanf with spaces
यह मुझे बहुत मदद नहीं करता है
मैं पढ़ लिया है। मैं अंतरिक्ष के साथ संख्याओं को डिलीमीटर के रूप में कैसे पढ़ सकता हूं। उदाहरण के लिए मेरे पास इनपुट 2 5 7 4 3 8 18 इनपुट के रूप में निम्न संख्याएं हैं, अब मैं इन्हें विभिन्न चरों में संग्रहीत करना चाहता हूं।
कृपया मदद करें।

+0

[कड़ी] (http://stackoverflow.com/a/3765075/1317740)। क्या इससे मदद मिलेगी? – Niranjan

+0

वह सफेद रिक्त स्थान पढ़ने के लिए है। मैं सफेद रिक्त स्थान से अलग संख्याओं को पढ़ना चाहता हूं। – Jaguar

+0

क्या यह गतिशील रूप से लंबाई वाली स्ट्रिंग या संख्याओं का एक निश्चित सेट है? – Niranjan

उत्तर

31

मैं अंतरिक्ष के साथ scanf द्वारा पढ़ा मूलभूत मूल्यों से लगता है/दर्ज करें। यदि आप पूर्णांक प्रिंट कर रहे हैं तो आप '% d' के बीच स्थान प्रदान कर सकते हैं। अन्य मामलों के लिए भी वही।

scanf("%d %d %d", &var1, &var2, &var3); 

इसी तरह आप पढ़ना चाहते हैं कॉमा सेपरेटेड वैल्यूज़ का उपयोग करें:

scanf("%d,%d,%d", &var1, &var2, &var3); 
+2

स्कैनफ अधिकांश '%' निर्देशों के साथ व्हाइटस्पेस को अनदेखा करता है, इसलिए आप आमतौर पर अपने प्रारूप तारों में रिक्त स्थान नहीं चाहते हैं।तो पहले मामले के लिए (व्हाइटस्पेस सीमित पूर्णांक), आप 'स्कैनफ ("% d% d% d", और var, और var2, &var3);' अतिरिक्त रिक्त स्थान वास्तव में यहां कुछ भी चोट नहीं पहुंचाते हैं (उनके पास कोई प्रभाव नहीं है), लेकिन इन अन्य मामलों में आप उन्हें तब तक नहीं चाहते हैं जब तक आपको उनकी आवश्यकता न हो। –

+0

आपको यहां और var1 का उपयोग क्यों करना है (var1 एक int टाइप वेरिएबल है?)? क्या यह var1 की मेमोरी एड्रेस के लिए सिर्फ 'लेबल' नहीं है? – YoTengoUnLCD

+0

@YoTengoUnLCD yes ठीक है। 'scanf' फ़ंक्शन को उस पते पर मान को ओवरराइट करने के लिए पते की आवश्यकता होती है। यह' ints' और किसी अन्य प्रकार के लिए सही है जिसे आप 'स्कैनफ़' के साथ उपयोग कर सकते हैं। यहां कोई जादू नहीं है, अगर आपके पास कोई है फ़ंक्शन जिसे किसी मान को ओवरराइट करने की आवश्यकता होती है, उस फ़ंक्शन को पते की आवश्यकता होती है, न कि मूल्य। –

3

पढ़ें के रूप में %s[^\n]

और फिर स्ट्रिंग के प्रत्येक char पढ़ा है, और एक atoi() करना अगर यह एक char है, और इसे अनदेखा।

3

यह प्राप्त चरों की सूची का उपयोग कर के रूप में सरल किया जाना चाहिए:

scanf("%i %i %i", &var1, &var2, &var3);

+0

यहां एफपी क्या है? उपर्युक्त मामले में डेलीमीटर \ n है, मैं अंतरिक्ष को डेलीमीटर के रूप में उपयोग करना चाहता हूं। – Jaguar

+0

क्षमा करें, मैंने इसे हटा दिया क्योंकि यह इस उदाहरण में प्रासंगिक नहीं है। आपको अंतरिक्ष डिलीमीटर कहीं कहीं निर्दिष्ट करने की आवश्यकता नहीं है, यह आपके प्रारूप स्ट्रिंग में निहित है। –

2
int main() 
{ 
char string[200]; 
int g,a,i,G[20],A[20],met; 

gets(string); 
g=convert_input(G,string); 

for(i=0;i<=g;i++) 
    printf("\n%d>>%d",i,G[i]); 
return 0; 
} 

int convert_input(int K[],char string[200]) 
{ 
int j=0,i=0,temp=0; 
while(string[i]!='\0') 
{ 
    temp=0; 
    while(string[i]!=' ' && string[i]!='\0') 
     temp=temp*10 + (string[i++]-'0') ; 
    if(string[i]==' ') 
     i++; 
    K[j++]=temp; 
} 
return j-1; 
} 
+1

क्या कोई विवरण नहीं आएगा? – Bridge

2

scanf परिसीमक के रूप में किसी भी खाली स्थान के उपयोग करता है, इसलिए यदि आप सिर्फ scanf("%d", &var) कहते हैं कि यह कोई श्वेत रिक्ति को छोड़ और फिर पढ़ा जाएगा एक पूर्णांक (अगले गैर-अंक तक अंक) और कुछ भी नहीं।

ध्यान दें कि व्हाइटस्पेस किसी भी सफेद स्थान - रिक्त स्थान, टैब, न्यूलाइन या कैरिज रिटर्न है। उनमें से कोई भी सफेद जगह है और उनमें से कोई भी एक या अधिक लगातार पूर्णांक को सीमित करने के लिए काम करेगा।

-1
int main(){ 
    int A[1000]; 
    char *tok = NULL; 
    char *savePtr = NULL; 
    char str[1000] = ""; 
    int totalElement=0; 
    printf("Enter space seperated string\n"); 
    scanf("%[^\n]s", str); 
    savePtr = str; 

    while((tok=strtok_r(savePtr, " ", &savePtr))){ 
     A[totalElement++] = atoi(tok); 
    } 

    for(int i = 0; i < totalElement; i++) 
     printf("%d ", A[i]); 
} 
-1
+0

जैसा कि स्कैनफ की अन्य पोस्ट में उल्लिखित है deliminat ई अंतरिक्ष और इनपुट ले लो। –

0

सी ++ कोड TurboC में ++ संकलक:

#include<iostream.h> 
#include<stdlib.h> 
#include<string.h> 
#include<conio.h> 
void main() 
{ 
    int l=0,i=0; 
    char *a,*t; 
    clrscr(); 
    int n; 
    cout<<"\nEnter a string: "; 
    cin>>t; 
    a=strdup(t); //duplicate 
    while(strlen(a)){ 
     a = strtok(a, ","); //gives string upto where ',' is found 
     n=atoi(a); 
     l+=strlen(a); //we save the length 
     cout<<"n= "<<n<<" a= "<<a<<" "<<strlen(a)<<endl; //simple output 
     a=strdup(t+l+i); //updating the same pointer with rest part 
     i++; //counting number of ','s 
    } 
    getch(); 
} 

Output looks like: