2012-12-22 29 views
5

Dosyanın sonuna kadar okunması yaygındır, ancak ben bir metin dosyasının sonundaki veriyi (sayı dizisi) nasıl okuyabileceğimi merak ediyorum. satır? Yeni satırlarda konumlandırılmış bir dosyadan birkaç sayı dizisini okuma görevim var.C/C++ satırının sonuna kadar dosyadan veri okuyor ++

1 2 53 7 27 8 
67 5 2 
1 56 9 100 2 3 13 101 78 

ilk seri: 1 2 53 7 27 8

İkincisi: 67 5 2

üçüncü on: 1 56 9 100 2 3 13 101 78

Burada giriş örneğidir

Dosyaları ayrı ayrı okumak zorundayım, ancak her biri satır sonuna kadar. Şu kodum var:

#include <stdio.h> 
    FILE *fp; 
    const char EOL = '\\0'; 
    void main() 
    { 
     fp = fopen("26.txt", "r"); 
     char buffer[128]; 
     int a[100]; 
     int i = 0; 
     freopen("26.txt","r",stdin); 
     while(scanf("%d",&a[i])==1 && buffer[i] != EOL) 
      i++; 
     int n = i; 
     fclose(stdin); 
    } 
Dosyanın sonuna kadar okur, bu yüzden beklediğim şeyi yapmaz. Sen ne önerirsin?

+0

Belirli bir sebep, stdin kullanmak ve okumak için? –

cevap

5

Kullanım fgets() sonra (muhtemelen strtol() birlikte) hattını ayrıştırmak, tam bir çizgi okumak için.

#include <stdio.h> 
#include <stdlib.h> 

int main(void) { 
    char buffer[10000]; 
    char *pbuff; 
    int value; 

    while (1) { 
    if (!fgets(buffer, sizeof buffer, stdin)) break; 
    printf("Line contains"); 
    pbuff = buffer; 
    while (1) { 
     if (*pbuff == '\n') break; 
     value = strtol(pbuff, &pbuff, 10); 
     printf(" %d", value); 
    } 
    printf("\n"); 
    } 
    return 0; 
} 

Sen code running at ideone görebilirsiniz.

+1

Bu fikri kullanacaksanız, garip girişlerle (kötü veri içeren dosyalar (ekstra uzun satırlar dahil), boş satırlar, sondaki boşluklu satırlar, boş dosyalar, ..., .. ile ilgili kod eklemek için eklediğinizden emin olun. .) – pmg

2

\ n yeni satır için kaçış olmalıdır bu yerine

const char EOL = '\n'; 

u çalışır duruma aldın denemek? Bu yardımcı olacaktır:

#include <stdio.h> 
FILE *fp; 
const char EOL = '\n'; // unused . . . 

void main() 
{ 
    fp = fopen("26.txt", "r"); 
    char buffer[128]; 
    int a[100]; 
    int i = 0; 
    freopen("26.txt","r",stdin); 

    while(scanf("%i",&a[i])==1 && buffer[i] != EOF) 
     ++i; 

    //print values parsed to int array.  
    for(int j=0; j<i; ++j) 
     printf("[%i]: %i\n",j,a[j]); 

    fclose(stdin); 
} 
İlgili konular