Thắc mắc về hàm feof trong c?

while (!feof(f))
{
    fscanf(f,"%s",&A[i]);
    i++;
} 

khi dịch đến đoạn code trên chương trình báo lỗi stray’`’ in program .mình mới học về tệp,ai giúp mình với

@Htc cho thêm code đi, code này chắc ngắn? Copy toàn bộ câu báo lỗi luôn.

Đừng copy 1 đoạn code hoặc 1 đoạn lỗi. Nếu có thể hay post toàn bộ nhé :smile:

2 Likes
#include conio.h
#include iostream
#include fstream
#include string
#include stdio.h

int main()
{
    FILE*f= fopen("input.txt","r");
    if(!f)
    {
        printf("not find file \n");
        return 0;
    }
    int i=0;
    char A[100000];
`    while (!feof(f))
    {
        fscanf(f,"%s",&A[i]);
        i++;
    }
    fclose(f);
    FILE*f1=fopen("output.txt","w");
    for (int j=0;j<i;j++)
        fprintf(f1,"%s",A[j]);
    fclose(f1);
}

toàn bộ đây bạn ơi

Copy toàn bộ lộ ra cái lỗi ngay, có cái dấu ` ở ngay phía trước while, bỏ dấu đó đi.

Nhưng đó cũng chưa hết lỗi

Các thư viện này vừa không cần thiết, vừa sai cấu trúc.

#include conio.h
#include iostream
#include fstream
#include string
#include stdio.h

Chỉ cần thế này là đủ

#include <stdio.h>

Câu lệnh này cũng sai

fprintf(f1,"%s",A[j]);

Không thể dùng %s cho A[j] được. Trong trường hợp này phải dùng

fprintf(f1,"%c",A[j]);

Bạn nên xem qua các videos hướng dẫn lập trình C ở đây

4 Likes

mình muốn đưa đoạn code này vào 1 hàm và mình viết thế này chương trình chạy được nhưng mà bị lỗi has stop working

int duyetfile(char *fn)
{
    FILE*f= fopen("fn","r");
   /* if(!f)
    {
        printf("not find file \n");
        return 0;
    }*/
    int i=0;
    char A[100000];
    while (!feof(f))
    {
        fscanf(f,"%c",&A[i]);
        i++;
    }
    fclose(f);
    FILE*f1=fopen("output.txt","w");
    for (int j=0;j<i;j++)
        fprintf(f1,"%c",A[j]);
    fclose(f1);
}
int main()
{
    duyetfile ("input.txt");
}

Tại bạn comment cái code này. Đoạn code này kiểm tra xem file có tồn tại hay không. Nếu không có, dừng chương trình.

Bạn cố tình bỏ qua nó, dẫn đến không có file, mà bạn lại cố đọc cái chỗ không có đó. Điều đó dẫn đến lỗi.

Code như sau sẽ chạy được.

#include <stdio.h>

int duyetfile(char *fn)
{
    FILE*f= fopen("fn","r");
    if(!f)
    {
        printf("not find file \n");
        return 0;
    }
    int i=0;
    char A[100000];
    while (!feof(f))
    {
        fscanf(f,"%c",&A[i]);
        i++;
    }
    fclose(f);
    FILE*f1=fopen("output.txt","w");
    for (int j=0; j<i; j++)
        fprintf(f1,"%c",A[j]);
    fclose(f1);
    return 0;
}
int main()
{
    duyetfile ("input.txt");
    return 0;
}
2 Likes

tại vì mình thấy khi chạy có đoạn code check đấy,thì luôn hiện not find file,nên xóa đi

mà mình muốn viết 1 đoạn code để khi run chương trình yêu cầu nhập tên file thì

char x;
    printf("Nhap ten file: ");
    scanf("%c",&x);
    duyetfile (x);

sai chỗ nào ạ

Bỏ dấu “” trong fopen là dc mà :slight_smile:

2 Likes

Bỏ "" trong này hả, lỗi sao @Gio?

FILE*f= fopen("fn","r");
FILE*f1=fopen("output.txt","w");
2 Likes

Em hiểu ý bạn ấy fn là tên file nhập vào
Chứ không phải là file tên “fn”
đổi thành fopen(fn,“r”); chắc là hết lỗi :slight_smile:

3 Likes

À, em nói đúng rồi :smile: Anh đang trong cty, cứ thấy code đoạn nào có vấn đề là làm rẹt rẹt ko có đọc =))

Code đã sửa lại nhờ nhắc nhở của @Gio

#include <stdio.h>

int duyetfile(char *fn)
{
    FILE*f= fopen(fn,"r");
    if(!f)
    {
        printf("not find file \n");
        return 0;
    }
    int i=0;
    char A[100000];
    while (!feof(f))
    {
        fscanf(f,"%c",&A[i]);
        i++;
    }
    fclose(f);
    FILE*f1=fopen("output.txt","w");
    for (int j=0; j<i; j++)
        fprintf(f1,"%c",A[j]);
    fclose(f1);
    return 0;
}
int main()
{
    duyetfile ("input.txt");
    return 0;
}
3 Likes
#include"thuviencuatoi.h"


int main( )
{
    int i=0, n=0;
    float a[100];
    FILE *f;
    f= fopen("vui.txt", "rt");
   // Doc_Day(f, a, &n);
    while (!feof(f)) {        
        fscanf(f, "%f", &a[i]);
        i++;
        n++;
    }
    printf("%d\n", n);
    /*for(i=0; i<n; i++)
        fscanf(f, "%f", &a[i]);*/
    fclose(f);
    for(i=0; i<n; i++)
        printf(" %.2f", a[i]);
}

file vui.txt của mk có 8 phần tử nhưng khi đếm n thì lại có 9 phần tử . Ai bt giúp t vs

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?