How to store data in an array and that does not show null spaces?

1

I'm trying to store an "address" in a array with 150 spaces , this is stored in a txt document and the problem is that when I open the txt document the address shows me the spaces leftovers .

The code is as follows:

struct cliente{
    char dni[9];
    char nombre[20];
    char apellidos[80];
    char direccion[150]
}clientes[max_clientes]; 



void aniadirCliente()
{

    if(clientes[n].dni[0]=='
struct cliente{
    char dni[9];
    char nombre[20];
    char apellidos[80];
    char direccion[150]
}clientes[max_clientes]; 



void aniadirCliente()
{

    if(clientes[n].dni[0]=='%pre%'){
        printf("\nIntroduce el nombre del archivo: \nNombre por defecto: clientes.txt\n\n");
        gets(nom_archivo);
        fflush(stdin);
        //Cuando abrimos el fichero le tenemos que poner rw para que podamos escribir y leer.
        archivo=fopen(nom_archivo,"rw");
        if ((archivo = fopen(nom_archivo, "rw")) == NULL) {
            fprintf(stderr, "\n\nEl archivo no existe.");
            system("cls"); //En windows limpia pantalla
        }else{
            int i;
            printf("\n\nArchivo cargado correctamente.");
            for(i=0; i<max_clientes;i++){
                //Los datos teneis que ponerlos con _ porque no coge los espacios. Ej: Pelegrin_Castillo
                fscanf(archivo,"\n %s %s %s %s",clientes[i].dni,clientes[i].nombre,clientes[i].apellidos,clientes[i].direccion);
            }
            for(i=0;i<max_clientes;i++){
                if(clientes[i].dni[0]=='%pre%'){
                    //Crear un nuevo cliente, lo mismo que antes los espacios con _
                    puts("DNI:");
                    scanf("%s", &clientes[i].dni);
                    fprintf(archivo, "%s", clientes[i].dni);

                    puts("Nombre:");
                    scanf("%s", &clientes[i].nombre);
                    fprintf(archivo, "%s", &clientes[i].nombre);

                    puts("Apellidos:");
                    scanf("%s", &clientes[i].apellidos);
                    fprintf(archivo, "%s", &clientes[i].apellidos);

                    puts("Direccion:");
                    scanf("%s", &clientes[i].direccion);
                    fprintf(archivo, "%s", &clientes[i].direccion);
                    break;
                    }
                }
            }

}
            fclose(archivo);
            system("cls");

}
'){ printf("\nIntroduce el nombre del archivo: \nNombre por defecto: clientes.txt\n\n"); gets(nom_archivo); fflush(stdin); //Cuando abrimos el fichero le tenemos que poner rw para que podamos escribir y leer. archivo=fopen(nom_archivo,"rw"); if ((archivo = fopen(nom_archivo, "rw")) == NULL) { fprintf(stderr, "\n\nEl archivo no existe."); system("cls"); //En windows limpia pantalla }else{ int i; printf("\n\nArchivo cargado correctamente."); for(i=0; i<max_clientes;i++){ //Los datos teneis que ponerlos con _ porque no coge los espacios. Ej: Pelegrin_Castillo fscanf(archivo,"\n %s %s %s %s",clientes[i].dni,clientes[i].nombre,clientes[i].apellidos,clientes[i].direccion); } for(i=0;i<max_clientes;i++){ if(clientes[i].dni[0]=='%pre%'){ //Crear un nuevo cliente, lo mismo que antes los espacios con _ puts("DNI:"); scanf("%s", &clientes[i].dni); fprintf(archivo, "%s", clientes[i].dni); puts("Nombre:"); scanf("%s", &clientes[i].nombre); fprintf(archivo, "%s", &clientes[i].nombre); puts("Apellidos:"); scanf("%s", &clientes[i].apellidos); fprintf(archivo, "%s", &clientes[i].apellidos); puts("Direccion:"); scanf("%s", &clientes[i].direccion); fprintf(archivo, "%s", &clientes[i].direccion); break; } } } } fclose(archivo); system("cls"); }
    
asked by Trackless 17.03.2018 в 12:29
source

1 answer

1

This should work for you. Change the way to open the file from "rw" to "a +" among other changes, such as == by! =, Delete the line to open duplicate document, etc ... There were several errors in your code:

#include <stdio.h>
#define max_clientes 50

struct cliente{
    char dni[9];
    char nombre[20];
    char apellidos[80];
    char direccion[150]
}clientes[max_clientes];
FILE *archivo;

int main() {
    aniadirCliente();
    return 0;
}


void aniadirCliente()
{
    int i;
    char nom_archivo[50];

    printf("\nIntroduce el nombre del archivo: \nNombre por defecto: clientes.txt\n\n");
    gets(nom_archivo);
    fflush(stdin);

    //Cuando abrimos el fichero le tenemos que poner rw para que podamos escribir y leer.
    if ((archivo = fopen(nom_archivo, "a+")) != NULL) {

        for(i=0;i<max_clientes;i++){
                //Crear un nuevo cliente, lo mismo que antes los espacios con _
                puts("DNI:");
                scanf("%s", &clientes[i].dni);
                fprintf(archivo, "DNI: %s\n", &clientes[i].dni);

                puts("Nombre:");
                scanf("%s", &clientes[i].nombre);
                fprintf(archivo, "Nombre: %s\n", &clientes[i].nombre);

                puts("Apellidos:");
                scanf("%s", &clientes[i].apellidos);
                fprintf(archivo, "Apellidos: %s\n", &clientes[i].apellidos);

                puts("Direccion:");
                scanf("%s", &clientes[i].direccion);
                fprintf(archivo, "Direccion: %s\n", &clientes[i].direccion);
                break;
                }

    }
        fclose(archivo);
        system("cls");

} 

As it is put there, it will not print the remaining blank spaces that you comment.

    
answered by 25.03.2018 / 18:29
source