Aiuto con la funzione gets

di il
2 risposte

Aiuto con la funzione gets

Ciao raga, stavo provando a fare un semplicissimo esercizio sui file
volevo provare a inserire sctringhe con spazi e ho provato con la gets ma non mi funziona
potete aiutarmi?
#include <stdio.h>
#include <stdlib.h>

struct struttura{
    char nickname[20];
    int goal;
}dip;

FILE *fp;

void nuovo(){
    fp=fopen("dati.txt","w");
    printf("\nFILE CREATO CON SUCCESSO\n");
    fclose(fp);
}

void scrivi(){
    fp=fopen("dati.txt","a");
    printf("\nINSERISCI NICKNAME: ");
    //scanf("%s",&dip.nickname);
    gets(dip.nickname);                     //E QUI IL PROBLEMA
    system("PAUSE");
    printf("\nINSERISCI NUMERO GOAL: ");
    scanf("%d",&dip.goal);
    fwrite(&dip,sizeof(dip),1,fp);
    fclose(fp);
}

void leggi(){
    fp=fopen("dati.txt","r");
    fread(&dip,sizeof(dip),1,fp);
    while(!feof(fp)){
        printf("%d\t%s\n",dip.goal,dip.nickname);
        fread(&dip,sizeof(dip),1,fp);
    }
    fclose(fp);
}

main(){
    int scelta;
    do{
        system("CLS");
        printf("0 CHIUDI\n1 NUOVO\n2 SCRIVI\n3 LEGGI\nCOSA VUOI FARE?: ");
        scanf("%d",&scelta);
        switch(scelta){
            case 1:
                nuovo();
                break;
            case 2:
                scrivi();
                break;
            case 3:
                leggi();
                break;
        }
        system("PAUSE");
    }while(scelta!=0);
    return 0;
}

2 Risposte

  • Re: Aiuto con la funzione gets

    Up
  • Re: Aiuto con la funzione gets

    Mi sembra che è solo un problema con quella system("PAUSE")
    se la togli funziona a meno di un non corretto output.
    io modificherei la scrivi così:
    
    void scrivi(){
        fp=fopen("dati.txt","a");
        printf("\nINSERISCI NICKNAME: ");
    	*dip.nickname = '\0';
        while(strlen(dip.nickname) < 1)
    	{
    		gets(dip.nickname);
    	}                     //E QUI IL PROBLEMA
        //system("PAUSE");
        printf("\nINSERISCI NUMERO GOAL: ");
        scanf("%d",&dip.goal);
        fwrite(&dip,sizeof(dip),1,fp);
        fclose(fp);
    }
    
    
Devi accedere o registrarti per scrivere nel forum
2 risposte