01/10/2018, 10:28

Đọc đến hết dòng trong C

Mình có 1 file input như nhau

10 25 4 3 86 1 23 20 14 1 3 7 3 16 7
2

Mình muốn đọc các số trong dòng 1 vào thành 1 mảng a, còn số nằm ở dòng 2 thì cho thành biến k. Mình có google và thử dùng fgets() nhưng không được. Rất mong các bạn giúp đỡ.

Đây là cách mình đã thử:

#include <stdio.h>
int main(){
    //Doc
    FILE *input = fopen("Input7.txt","r");
    int a[2000],k;
    fgets(a,2000,input);
    fscanf(input,"%d",&k);
    fclose(input);
    return 0;
}
Khoa NTA viết 12:44 ngày 01/10/2018

Code của bạn sao nhìn ngộ vậy, bạn nói “không được” nhưng không được chỗ nào chứ? fgets đọc ra một chuỗi chứ có phải ra mảng số đâu mà int a[2000];!

#include <stdio.h>
int main(){
    //Doc
    FILE *input = fopen("Input7.txt","r");
    char a[2000];
    int k;
    fgets(a,2000,input);
    fscanf(input,"%d",&k);
    printf("a: %sk: %d\n", a, k);
    fclose(input);
    return 0;
}

Rồi xong phần đọc file, giờ bạn tự chuyển sang số từng số rồi đưa vào mảng là xong.

Hoàng Tùng Lâm viết 12:29 ngày 01/10/2018

Vậy có cách nào vẫn đọc được như mong muốn nhưng đơn giản hơn k ạ ?

Khoa NTA viết 12:44 ngày 01/10/2018

Trong đầu mình hiện tại thì chưa có cách nào gọi là “đơn giản hơn” được. Nhưng mình thấy như vậy là đơn giản lắm rồi, chỉ cần bạn biết:

  • C-style string và 1 vài hàm cơ bản trong string.h như strlen().
  • Biết một chút về cấp phát động: malloc()free() (còn tùy thuộc bạn làm cách nào thôi, không nhất thiết phải biết).
  • Hệ số thập phân thì: 12345 = (((1*10 + 2) * 10 + 3) * 10 + 4) * 10 + 5

Chỉ bao nhiêu đó là dư sức làm Thay vì bớt tí thời gian đi coi phim hay lướt fb thì suy nghĩ cách giải một chút cũng tốt mà. Mình code xong bài này trước khi mình reply topic của bạn nên mình không có nói phét đâu.

Hoàng Tùng Lâm viết 12:35 ngày 01/10/2018

Cảm ơn bạn nhiều nhé

Hoàng Tùng Lâm viết 12:32 ngày 01/10/2018

Mình đã đọc được rồi nha, cảm ơn gợi ý của bạn. Đây là code của mình nếu có ai cần :v

#include <stdio.h>
#include <string.h>

int main(){
    FILE* input = fopen("input7.txt","r");
    char a[1000]; 
    char* x;      
    int k;

    fgets(a,1000,input); //doc dong 1: 10 25 4 3 86 1 23 20 14 1 3
    fscanf(input,"%d",&k);
    fclose(input);

    int b[1000]; //khoi tao mang integer
    int i,n;
    i = 0;
    x = strtok(a," "); //cat tu dau xau a den cho co dau cach
    while (x!=NULL){ //khi chua het dau cach
        b[i++] = atoi(x); //convert x thanh so nguyen roi cho vao mang b
        x = strtok(NULL," "); //cat tiep tinh tu vi tri truoc do
    }
    n = i; //so phan tu cua mang b
    int dem=0;
    for (i=1;i<=n;++i){
        if (b[i]%k==0){
            dem+=1;
        }
    }

    FILE* output = fopen("output7.txt","w");
    fprintf(output,"%d",dem);
    fclose(output);
    return 0;
}
Bài liên quan
0