Saya cukup baru di C dan saya mencoba membuat program di mana saya mengambil nama dan informasi lain dari file teks dan kemudian menyimpannya di file .dat. Ini kode saya:

#include <stdio.h>
#define MAX 30

typedef struct 
{
    char nombre[MAX];
    char apellido[MAX];
    char pais[MAX];
    unsigned int puntaje;
} Treg;


void ArmaBinario (FILE *archb);
void BuscaArchivo(FILE *archb);

void main (){
    FILE *archb; 

    ArmaBinario(archb); 
    BuscaArchivo(archb); 
}

void ArmaBinario (FILE *archb){
    FILE *archt;
    Treg ranking;
    char car; 
    int i; 

    archt = fopen("datos_ej26.txt","rt");

    if (archt == NULL) {
        printf("Error al abrir el archivo: el archivo no existe.");
    }
    else{
        archb = fopen("ranking.dat","wb");
        car = fgetc(archt);
        while (!feof(archt)){
            i = 0;
            while (car != ' ') {
                ranking.nombre[i] = car;
                i++;
                car = fgetc(archt);
            }
            car = fgetc(archt); car = fgetc(archt);
            i = 0;
            while (car != ' ') {
                ranking.apellido[i] = car;
                i++;
                car = getc(archt);
            }

            car = fgetc(archt); car = fgetc(archt);
            i = 0; 
            while (car != ' ') {
                ranking.pais[i] = car;
                i++;
                car = fgetc(archt);
            }

            fscanf(archt,"%u \n",&ranking.puntaje);
            fwrite(&ranking,sizeof(Treg),1,archb); 
            car = fgetc(archt);
            
        }

    } 

    fclose(archt);
    fclose(archb); 
 }


Struktur file teksnya seperti ini

Name Surname Country Points

Ketika saya menjalankan program dan kemudian melihat ke file .dat saya tidak mendapatkan nama dan nama belakang, biasanya karakter terakhir dari negara dan kemudian hanya bilangan bulat. Misalnya untuk

John Smith Inglaterra 290

Saya mendapat

Name: 
Country: terra
Points: 1685027142 

Saya yakin masalahnya ada pada penanganan karakter, tetapi saya tidak yakin apa masalah sebenarnya.

Terima kasih!

c
0
Morganuz 4 April 2021, 02:01

1 menjawab

Jawaban Terbaik

Anda memiliki masalah yang berbeda:

  • Anda melewatkan satu karakter di antara setiap kata
  • anda tidak menginisialisasi variabel Treg sebelum menggunakannya di setiap awal baris baru
  • sangat tidak berguna untuk meneruskan variabel FILE* ke fungsi jika tidak diinisialisasi sebelum di main dan juga karena file archb ditutup dalam fungsi, itu tidak dapat digunakan apa adanya setelah keluar dari fungsi.
1
Ptit Xav 4 April 2021, 09:38