从文本文件中获取字符并将它们存储在字符串中

时间:2021-04-03 23:01:30

标签: c

我对 C 相当陌生,我正在尝试制作一个程序,在该程序中我从文本文件中获取名称和其他信息,然后将其存储在 .dat 文件中。这是我的代码:

#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); 
 }


文本文件的结构是这样的

Name Surname Country Points

当我运行程序然后查看 .dat 文件时,我没有得到姓名和姓氏,通常是国家的最后一个字符,然后是一个整数。例如对于

John Smith Inglaterra 290

我明白

Name: 
Country: terra
Points: 1685027142 

我确定问题出在字符的处理上,但我不确定确切的问题是什么。

谢谢!

1 个答案:

答案 0 :(得分:1)

你有不同的问题:

  • 在每个单词之间跳过一个字符
  • 在新行的每个开头使用它之前不要初始化 Treg 变量
  • 如果在 main 之前没有初始化,那么将 FILE* 变量传递给函数不是很有用,而且由于文件 archb 在函数中关闭,退出函数后不能按原样使用。