2013-07-13 14 views
6

10'dan daha uzun str1 girerseniz, geri kalanı arabellekte kalır ve str2 benim girilir. Tampon, str2'dan önce nasıl temizlenir, böylece girebilirim? fgets(str1,10,stdin); sonraBirden çok dizeyi almada arabellek nasıl temizlenir?

#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

kullanım "fflush (stdin)" –

+5

@NithinBhaskar sayılı – jamesdlin

+0

Daha önce denedim, işe yaramıyordu. – dushyantashu

cevap

2

'dizge1' okunduktan sonra giriş arabelleği açacak

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

Bu

yok.

Yani kod

#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

İlk olarak bir "\ n" harfi varsa 10 karakter girdi mi? –

+0

@JimBalter İşaretlediğiniz için teşekkürler. Gerekli düzenlemeyi yaptık. –

+0

Yine de, dönüşü “fgets” den denemiyorsunuz; başlatılmamış bir strl'ye erişebilirsiniz (ör. boş giriş için). – 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; 
} 

birisi fazla 4092 karakter girerse Evet, biliyorum, ... Bunun olma büyük bir şans var neyi olmalıdır.

0

Farklı bir yol: fgets() 'ı önlemek ve karakterleri tek tek okumak. Bu şekilde tek bir döngü içinde bütün şartları ele verir:

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; 
}