2012-12-22 43 views
5

Thông thường đọc cho đến khi kết thúc tệp, nhưng tôi quan tâm đến cách đọc dữ liệu (một chuỗi số) từ tệp văn bản cho đến khi kết thúc dòng? Tôi nhận nhiệm vụ đọc một số chuỗi số từ một tệp, được đặt trong các dòng mới. Dưới đây là một ví dụ về đầu vào:đọc dữ liệu từ tập tin cho đến cuối dòng trong C/C++

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

Đầu tiên series: 1 2 53 7 27 8

Second một: 67 5 2

thứ ba một: 1 56 9 100 2 3 13 101 78

Tôi phải đọc chúng riêng biệt với tệp, nhưng mỗi tệp cho đến cuối dòng. Tôi có mã này:

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

Nó đọc cho đến khi kết thúc tệp, vì vậy nó không làm được những gì tôi mong đợi. Bạn có đề nghị gì?

+0

Bất kỳ lý do cụ thể nào để sử dụng freopen và đọc từ stdin? –

Trả lời

5

Sử dụng fgets() để đọc một dòng đầy đủ, sau đó phân tích dòng (có thể với strtol()).

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

Bạn có thể thấy các code running at ideone.

+1

Nếu bạn định sử dụng ý tưởng này, hãy đảm bảo bạn thêm mã để xử lý các đầu vào lạ (các tệp có dữ liệu xấu (bao gồm các dòng dài thừa), các dòng trống, các dòng có dấu cách, các tệp rỗng, ..., .. .) – pmg

2

\ n nên là lối thoát cho dòng sản phẩm mới, hãy thử này để thay thế

const char EOL = '\n'; 

u đã được nó làm việc? điều này sẽ giúp:

#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); 
} 
Các vấn đề liên quan