Salve a tutti, da poco programmo il c e perciò mi scuso in anticipo per la mia ignoranza.
Volevo scrivere un programma che prendesse dei dati in input da tastiera e li scrivesse in codice macchina su un file ("utenti").
ecco il codice:
//fwrite(&a,sizeof(a),1,b)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define fil "utenti"
typedef struct {
char name[25];
char sur[25];
int age;
char desc[500];
char mail[50];
char passwd[50];
char paese[50];
char ist[50];
} user;
int main() {
FILE *b;
user a;
int i;
char p[500];
printf("\n\n\t # m # \n");
printf("\t mmm# mmm mm#mm mmm #mmm mmm mmm mmm \n");
printf("\t#\" \"# \" # # \" # #\" \"# \" # # \" #\" #\n");
printf("\t# # m\"\"\"# # m\"\"\"# # # m\"\"\"# \"\"\"m #\"\"\"\"\n");
printf("\t\"#m## \"mm\"# \"mm \"mm\"# ##m#\" \"mm\"# \"mmm\" \"#mm\"\n\n\n");
if(!(b=fopen(fil,"a"))) {
printf("ERRORE:non e' stato possibile aprire il file\n");
exit(64);
}
printf("\t**NUOVO UTENTE**\n\n");
printf("-nome: ");
scanf(" %25s",&a.name);
printf("-cognome: ");
scanf(" %25s",&a.sur);
printf("-eta': ");
scanf(" %d",&a.age);
printf("-descrizione(breve): ");
fgets(p, 500, stdin);
p[strlen(p)-1]=0;
strncmp(a.desc,p,500);
strcpy(p,"");
printf("\n-mail: ");
scanf(" %50s",&a.mail);
printf("-password mail: ");
scanf(" %50s",&a.passwd);
printf("-paese attuale(continente/stato/regione/provincia/citta' se possibile): ");
scanf(" %50s",&a.paese);
printf("-istituto di studio o luogo di lavoro: ");
fgets(p, 50, stdin);
p[strlen(p)-1]=0;
strncmp(a.ist,p,50);
if((fwrite(&a,sizeof(a),1,b))>0)
printf("\n\t||SCRITTURA SU DATABASE AVVENUTA CON SUCCESSO||\n");
else
printf("\n\t||SCRITTURA SU FILE FALLITA RITENTARE||\n");
fclose(b);
return 0;
}
il programma non ha dato problemi fino alla prima fgets(), qui infatti l'input passa direttamente alla scanf() seguente, stessa cosa con il secondo fgets().
ecco l'output:
# m #
mmm# mmm mm#mm mmm #mmm mmm mmm mmm
#" "# " # # " # #" "# " # # " #" #
# # m"""# # m"""# # # m"""# """m #""""
"#m## "mm"# "mm "mm"# ##m#" "mm"# "mmm" "#mm" //da terminale c'è scritto "database"
**NUOVO UTENTE**
-nome: rocky
-cognome: balboa
-eta': 72
-descrizione(breve):
-mail: rocketto@gmail.com
-password mail: rocchettobalbo
-paese attuale(continente/stato/regione/provincia/citta' se possibile): america/usa/?/?/?
-istituto di studio o luogo di lavoro:
||SCRITTURA SU DATABASE AVVENUTA CON SUCCESSO||
Qualcuno mi sa spiegare il perchè? Inoltre ho provato anche con la gets() anche se è pericolosa per il programma ma il risultato non è cambiato.
(spero che il perchè non sia cosi banale ).