2013-07-13 5 views
6

यदि मैं लंबाई 10 से अधिक str1 दर्ज करता हूं, तो शेष बफर में रहता है और मेरे str2 में प्रवेश करता है। str2 से पहले बफर को कैसे साफ़ करें, तो मैं इसे इनपुट कर सकता हूं?एकाधिक स्ट्रिंग प्राप्त करने में बफर को कैसे साफ़ करें?

#include <stdio.h> 
int main(void) 
{ 
    char str1[10]; 
    char str2[10]; 
    fgets(str1,10,stdin); 
    fgets(str2,10,stdin); 

    puts(str1); 
    puts(str2); 
    return 0; 
} 
+0

उपयोग "fflush (stdin)" –

+5

@NithinBhaskar सं – jamesdlin

+0

मैं यह पहले की कोशिश की, यह काम नहीं कर रहा था। – dushyantashu

उत्तर

2

fgets(str1,10,stdin); बाद

while((c = getchar()) != '\n' && c != EOF); 

यह करना इनपुट बफर स्पष्ट हैं के बाद 'str1' पढ़ा जाता है।

तो अपने कोड

#include <stdio.h> 
int main() 
{ 
    char str1[10]; 
    char str2[10]; 
    int c; 
    str1[0]=0; 
    str2[0]=0; 
    fgets(str1,10,stdin); 
    if((str1[0]!=0) && (!strrchr(str1,'\n'))) 
     while((c = getchar()) != '\n' && c != EOF); 
    fgets(str2,10,stdin); 
    puts(str1); 
    puts(str2); 
    return 0; 
} 
+0

क्या होगा यदि पहले के भीतर '' \ n'' है इनपुट के 10 अक्षर? –

+0

@JimBalter इसे इंगित करने के लिए धन्यवाद। आवश्यक संपादन किया। –

+0

फिर भी, आप 'fgets' से वापसी का परीक्षण नहीं करते हैं; आप एक अनियमित 'str1' (उदा। खाली इनपुट के लिए) तक पहुंच सकते हैं। – Jens

-1
#include <stdio.h> 

#define MAX_LEN 9 
#define READBUF_LEN 4092 

int main(void) 
{ 
    char str1[MAX_LEN+1]; 
    char str2[MAX_LEN+1]; 
    char readbuf[READBUF_LEN+1]; 

    fgets(readbuf,READBUF_LEN,stdin); 
    strncpy(str1, readbuf,MAX_LEN); 
    str1[MAX_LEN]='\0'; 

    fgets(readbuf,READBUF_LEN,stdin); 
    strncpy(str2, readbuf,MAX_LEN); 
    str2[MAX_LEN]='\0'; 

    puts(str1); 
    puts(str2); 
    return 0; 
} 

हाँ, मुझे पता है, क्या अगर किसी को एक से अधिक 4092 वर्ण में प्रवेश करती है ... वहाँ कि हो रहा है का एक बड़ा मौका है किया जाना चाहिए।

0

एक अलग तरीका: fgets() से बचें, और अक्षर एक-एक करके पढ़ें। यह आपको एक पाश के अंदर सभी शर्तों को संभालने के लिए अनुमति देता है:

int main(void) 
{ 
    char str1[12]; 
    char str2[13]; 
    size_t pos; 
    int ch; 

    for (pos=0;;) { 
     ch = getc(stdin); 
     if (ch == '\n' || ch == EOF) break; 
     if (pos < sizeof str1 -1) str1[pos++] = ch; 
     } 
    str1[pos] = 0; 

    for (pos=0;;) { 
     ch = getc(stdin); 
     if (ch == '\n' || ch == EOF) break; 
     if (pos < sizeof str2 -1) str2[pos++] = ch; 
     } 
    str2[pos] = 0; 

    printf("str1='%s', str2=%s'\n", str1, str2); 

    return 0; 
} 
संबंधित मुद्दे