Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 7 của 7
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Nhập xuất file sử dụng struct

    tình hình là thế này mới học qua struct..em làm cái xuất nhập file.
    mà nếu làm từng cái (theo tên người hay theo điểm chẳng hạn) thì ko sao nhưng khi kết hợp vào thì ra lỗi liền..em bít là do cài vùng đệm nhưng ko sửa đc..mấy anh chỉ giúp em. thanks
    Mã nguồn PHP:
    #include<stdio.h> #define input "nhap.txt" #define output "xuat.txt" struct SINHVIEN { char TEN[100]; float DTB; }; void nhap(SINHVIEN A[]); void xuat(SINHVIEN A[]); void main() { SINHVIEN A[100]; nhap(A); xuat(A); } void nhap(SINHVIEN A[]) { float temp; FILE *fi=fopen(input,"r"); for(int i=0;i<3;i++) { fgets(A[i].TEN,100,fi); fflush(stdin); fscanf(fi,"%f",&temp); fflush(stdin); A[i].DTB=temp; } } void xuat(SINHVIEN A[]) { FILE *fo=fopen(output,"w"); for(int i=0;i<3;i++){ fprintf(fo,"%3s",A[i].TEN); fprintf(fo,"%0.2f
    "
    ,A[i].DTB); } fclose(fo); }  
    mấy anh chỉ giúp em kĩ vào tý em cảm ơn..

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    ko bác..
    ý em là em làm nhập trên màn hình thì được nhưng sao qua xuất nhập file thì lại dính lỗi..em đoán là do vùng đệm...em đã thử cả fflush(stdin) và f.ignore(dùng iostream) rồi. mà vẫn ko đc.
    mấy bác nhìn code rồi coi sai chỗ nào chỉ em với..
    em nhập vừa tên vừa điểm thì nó lại dính lỗi liền à.
    em sửa hoài ko đc nên nhờ mấy anh coi giúp.
    thanks.

  3. #3
    Ngày tham gia
    Sep 2015
    Đang ở
    89 Tam Trinh - Hoàng Mai - Hà Nội
    Bài viết
    0
    Trích dẫn Gửi bởi dinhha471
    ko bác..
    ý em là em làm nhập trên màn hình thì được nhưng sao qua xuất nhập file thì lại dính lỗi..em đoán là do vùng đệm...em đã thử cả fflush(stdin) và f.ignore(dùng iostream) rồi. mà vẫn ko đc.
    mấy bác nhìn code rồi coi sai chỗ nào chỉ em với..
    em nhập vừa tên vừa điểm thì nó lại dính lỗi liền à.
    em sửa hoài ko đc nên nhờ mấy anh coi giúp.
    thanks.
    Mình code theo đề nghị của cậu thôi, còn mình không bao giờ lưu cấu trúc ở dạng text vì không thuận tiện khi đọc/ghi và không có tính bảo mật.

    Mã:
    #include<stdio.h> #define input "nhap.txt" #define output "xuat.txt"  struct sinhvien  {     char ten[100];     float dtb; }; int nhap(char *,sinhvien a[], int); int xuat(char *,sinhvien a[], int);  void main() {     sinhvien a[100];    int n = 3;    if (nhap(input,a, n))         if(xuat(output,a, n))            printf("
    Da ghi vao tep %s
    ",output);        else            printf("
    Loi mo tep %s
    ",output);    else printf("
    Loi mo tep %s
    ",input); }  int nhap(char *filename,sinhvien a[], int n) {     FILE *infile = fopen(filename,"r");    if (infile == NULL) return 0;    for(int i=0;i<n;i++)     {         fgets(a[i].ten,101,infile);         fscanf(infile,"%f",&a[i].dtb);        char ch[2];fgets(ch,2,infile);    }     fclose(infile);    return 1;} int xuat(char *filename,sinhvien a[], int n) {     FILE *outfile = fopen(filename,"w");     if (outfile == NULL) return 0;    for(int i=0;i<n;i++)    {         fprintf(outfile,"%100s",a[i].ten);         fprintf(outfile,"%10.2f
    ",a[i].dtb);     }     fclose(outfile);     return 1;}

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    thanks bạn nhiều..
    còn 1 chổ cho mình hỏi lun...
    dòng char char[2]; fgets(ch,2,infile) là thế nào thế...có phải là để nhập kí tự
    không vậy?
    thanks bạn nhiều

    giải thik rõ tý nha bạn..

  5. #5
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi dinhha471
    thanks bạn nhiều..
    còn 1 chổ cho mình hỏi lun...
    dòng char char[2]; fgets(ch,2,infile) là thế nào thế...có phải là để nhập kí tự
    không vậy?
    thanks bạn nhiều

    giải thik rõ tý nha bạn..
    Cậu thử bỏ nó đi xem sao?

  6. #6
    Ngày tham gia
    Sep 2015
    Đang ở
    24 Rạch Bùng Binh , P10,Q3 , HCM
    Bài viết
    0
    Trích dẫn Gửi bởi dinhha471
    tình hình là thế này mới học qua struct..em làm cái xuất nhập file.
    mà nếu làm từng cái (theo tên người hay theo điểm chẳng hạn) thì ko sao nhưng khi kết hợp vào thì ra lỗi liền..em bít là do cài vùng đệm nhưng ko sửa đc..mấy anh chỉ giúp em. thanks
    Tham khảo cái này xem sao:

    Mã:
    #include <stdio.h> struct sinhvien  {     char ten[30];     float DTB; };  int write(char *fname, sinhvien a[], int n){    FILE *outf = fopen(fname,"a+");    if (outf == NULL) return 0;    for (int k = 0;k < n; k++)        fwrite(&a[k],sizeof(sinhvien),1,outf);    fclose(outf);    return 1;} int read(char *fname, sinhvien a[], int &n){    FILE *inf = fopen(fname,"r");    if (inf == NULL) return 0;    n = 0;    while (fread(&a[n],sizeof(sinhvien),1,inf)) n++;    fclose(inf);    return 1;} void nhap(sinhvien a[], int n){    for (int k = 0;k < n; k++)    {        printf("
    %d. Ho va ten: ",k);        fflush(stdin); gets(a[k].ten);            printf("Diem RB: ");         scanf("%f",&a[k].DTB);     }} void xuat(sinhvien a[], int n){    for (int k = 0;k < n; k++)        printf("
    %d. %-30s %5.2f",k, a[k].ten, a[k].DTB);} void main(){    sinhvien a[100]; int n = 2;    nhap(a,n);    write("sinhvien.dat", a, n);    read("sinhvien.dat", a, n);    xuat(a,n);}

  7. #7
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    thì bỏ nó đi thì nó mất tiu dòng nhập tên trong vòng for thứ 2 đó chứ sao..
    mà sao dùng fflush ko đc vậy bạn..
    có cách nào dùng thằng fflush ko vậy bạn..
    (muốn thanks nhưng ko thấy nó đâu hết à...sr nha)

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •