Từ 1 tới 5 trên tổng số 5 kết quả

Đề tài: ghi dãy số thực ra file text bị dính nhiều kí tự rác?

  1. #1
    Ngày gia nhập
    12 2018
    Bài viết
    5

    Mặc định ghi dãy số thực ra file text bị dính nhiều kí tự rác?

    Em mới ghi một dãy số thực ra file text thì khi mở file text lên thì có khá nhiều số 0 và một vài kí tự rác khác.Không biết làm thế nào để hết ạ.
    Code:
    #include<stdio.h>
    #include<stdlib.h>
    #include<conio.h>
    void nhap();
    void xuatFileText();
    void xuatFileBinary();
    void docFileText();
    void docFileBinary();
    FILE *f;
    
        void nhap(){
    	    int i; float SoThu[100]; int n;	
    		printf("Nhap so phan tu cua day:");
    		scanf("%d",&n);
    		printf("\tNhap phan tu cua day\n");
    		for(i=1;i<=n;i++)
    		{
    			printf("SoThu[%d]=",i);
    			scanf("%f",&SoThu[i]);
    		}
    }
    	void xuatFileText(){
    		int i; float SoThu[100]; int n;
    		f = fopen("DaySoThuc.txt","w");
    		for(i=1;i<=n;i++){
    			fprintf(f,"%.2f",SoThu[i]);	
    		}
    		fclose(f);		
    	}
    	void xuatFileBinary(){
    	     int i; float SoThu[100]; int n; 
    		f = fopen("DaySoThuc.dat","wb");
    		for(i=1;i<=n;i++){
    			fprintf(f,"%.2f",SoThu[i]);	
    		}
    		fclose(f);		
    	}
    	void docFileText(){
    		  int i; float SoThu[100]; int n; 
    		f = fopen("DaySoThuc.txt","r");
    		for(i=1;i<=n;i++){
    			printf("%.2f",SoThu[i]);
    		}
    		for(i=1;i<=n;i++){
    			fscanf(f,"\n%.2f",&SoThu[i]);	
    		}
    		fclose(f);
    	}
    	void docFileBinary(){
    		  int i; float SoThu[100]; int n; 
    		f = fopen("DaySoThuc.dat","rb");
    		for(i=1;i<=n;i++){
    			printf("%.2f",SoThu[i]);
    		}
    		for(i=1;i<=n;i++){
    			fscanf(f,"%.2f",&SoThu[i]);	
    		}
    		fclose(f);
    	}
    int main()
    {
    	int chon; int flag=0;
    	do{
    	printf("1.Nhap day thuc tu ban phim\n");
    	printf("2.Xuat day thuc ra file van ban\n");
    	printf("3.Xuat day thuc ra file nhi phan\n");
    	printf("4.Doc day tu file van ban xuat ra man hinh\n");
    	printf("5.Doc day tu file nhi phan xuat ra man hinh\n");
    	printf("6.Thoat\n");
    	printf("Ban chon:"); scanf("%d",&chon);
    	if(chon==1){
    		nhap();
    		flag=1;
    	}
    	if(chon==2){
    		if(flag==1)	xuatFileText();
    		else printf("Moi ban chon muc 1 truoc\n");
    	}
    	if(chon==3){
    		if(flag==1)	xuatFileBinary();
    		else printf("Moi ban chon muc 1 truoc\n");
    	}
    	if(chon==4){
    		if(flag==1) docFileText();
    		else printf("Moi ban chon muc 1 truoc\n");
    	}
    	if(chon==5){
    		if(flag==1) docFileBinary();
    		else printf("Moi ban chon muc 1 truoc\n");
    	}
    }while(chon!=6);
    }

  2. #2
    Ngày gia nhập
    07 2018
    Bài viết
    7

    - Cái mảng đưa vào ý, kết thúc cho nó thêm 1 cái ký tự rỗng '\0'
    - Cái cơ ghi ra file thì trong cái for í cho thêm dòng này
    if(KyTu[i] != '\0') cho_phep_ghi;
    else break;
    Đã được chỉnh sửa lần cuối bởi tkdlbhvn : 02-03-2019 lúc 05:22 PM.

  3. #3
    Ngày gia nhập
    02 2016
    Bài viết
    305

    Trích dẫn Nguyên bản được gửi bởi triutuat Xem bài viết
    Em mới ghi một dãy số thực ra file text thì khi mở file text lên thì có khá nhiều số 0 và một vài kí tự rác khác.Không biết làm thế nào để hết ạ.
    Code:
    ...
    	void xuatFileText(){
    		int i; float SoThu[100]; int n;
    		f = fopen("DaySoThuc.txt","w");
    		for(i=1;i<=n;i++){
    			fprintf(f,"%.2f",SoThu[i]);	
    		}
    		fclose(f);		
    	}
    ...
    Rác là phải rồi. "dãy số thực" của bạn có dữ liệu đâu mà bảo nó xuất ra.
    int i; float SoThu[100]; int n; // cả đám này được khai báo là biến nội. Chúng chả liên quan gì đến đám khai trong các hàm khác.

    Muốn sửa bài này thì khai chúng là biến toàn cục. Chữa cháy vậy thôi, chứ biến toàn cục thì không nên dùng nhiều.

  4. #4
    Ngày gia nhập
    12 2018
    Bài viết
    5

    Thế làm chuẩn phải như nào ạ anh chỉ em với.Em đang tập dùng hàm ạ

  5. #5
    Ngày gia nhập
    02 2016
    Bài viết
    305

    Xóa dòng này trong tất cả các hàm
    int i; float SoThu[100]; int n; // tức là chúng không còn là biến nội, khai báo bên trong hàm
    Thêm dòng này ngay sau FiLE *f; (trước khi khai báo các hàm)
    int i; float SoThu[100]; int n; // tức là bây giờ chúng trở thành biến toàn cục

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn