PDA

Visualizza la versione completa : [C] Strano problema con la funzione fptrintf();


wino_7
09-02-2009, 14:33
Salve a tutti devo creare un file di testo con il c.
Il mio problema è solo il modo in cui viene formattato l'output nel file.
Ora vi posto il codice e poi vi spiego meglio


#include <stdio.h>
#include <stdlib.h>

int main(int argc, char * argv[])
{
FILE * file;
char Codice_fiscale[50];
char Nome[50];
char Cognome[50];
char Telefono[50];
char Livello[50];
char Mansione[50];
char Data_assunzione[50];
char Data_nascita[50];
char Numero_civico[50];
char Via[50];
char Cap[50];
char bug[2];
char bug2[2];
char bug3[2];

if ( (file = fopen("Insert_impiegato.txt", "a") ) == NULL )
{
printf("Impossibile aprire file");
exit(1);
}

printf("Programma per l'inserimento degli impiegati !!!!!!!!!\n");

while (1)
{
printf("\n\n####################################\n\n");
printf("Inserisci Codice_fiscale :\n");
scanf("%s", Codice_fiscale);
printf("Valore Codice_fiscale : %s\n\n", Codice_fiscale);
printf("Inserisci Nome :\n");
scanf("%[^,]", Nome);
printf("Valore Nome : %s\n\n", Nome);
scanf("%s", bug);
printf("Inserisci Cognome :\n");
scanf("%[^,]", Cognome);
printf("Valore Cognome : %s\n\n", Cognome);
scanf("%s", bug2);
printf("Inserisci Telefono :\n");
scanf("%s", Telefono);
printf("Valore Telefono : %s\n\n", Telefono);
printf("Inserisci Livello :\n");
scanf("%s", Livello);
printf("Valore Livello : %s\n\n", Livello);
printf("Inserisci Mansione\n");
scanf("%[^,]", Mansione);
printf("Valore Mansione : %s\n\n", Mansione);
printf("Inserisci Data_assunzione\n");
scanf("%s", bug3);
scanf("%s", Data_assunzione);
printf("Valore Data_assunzione : %s\n\n", Data_assunzione);
printf("Inserisci Data_nascita\n");
scanf("%s", Data_nascita);
printf("Valore Data_nascita : %s\n\n", Data_nascita);
printf("Inserisci Numero_civico\n");
scanf("%s", Numero_civico);
printf("Valore Numero_civico : %s\n\n", Numero_civico);
printf("Inserisci Via\n");
scanf("%s", Via);
printf("Valore Via : %s\n\n", Via);
printf("Inserisci Cap\n");
scanf("%s", Cap);
printf("Valore Cap : %s\n\n", Cap);
fprintf(file, "INSERT INTO Impiegato VALUES ('%s', '%s', '%s', %s, %s, '%s', '%s', '%s', %s, '%s', %s);\n", Codice_fiscale, Nome, Cognome, Telefono, Livello, Mansione, Data_assunzione, Data_nascita, Numero_civico, Via, Cap);
}
fclose(file);
return(0);
}



Ho usato i vettori bug per "catturare la virgola" che altrimenti sarebbe andata direttamente come parametro alla scanf successiva, lo so che una mezza stronzata quella che ho fatto ma non mi interessa la correttezza per quello che devo fare.
Mi interessa solamente una file di testo che poi copio e incollo nel prompt per popolare le tabelle.
Il mio problema è che nel file di testo la fprintf() non viene scritta solo su una riga ma va a capo in prossimità del parametro scanf successivo alla virgola.
NOn so se sono riuscito a farmi capire, per capire meglio compilate e usate il programma e guardate nel file che la stringa va a capo.

P.S. Quando inserite i parametri nel programma, nel campo nome, congome e mansione dovete mettere la virgola.

MrX87
09-02-2009, 19:43
guarda, non so cosa significa quel:


scanf("%[^,]", Nome);

ma se il tuo problema è eliminare la virgola, bhè basta fare così, per esempio nel caso del nome:


printf("Inserisci Nome :\n");
scanf("%s", Nome);
Nome[strlen(Nome)-1] = '\0';
printf("Valore Nome : %s\n\n", Nome);

in questo modo vai ad accorciare la stringa, sovrascrivendo il penultimo carattere, ovvero la virgola(perchè l'ultimo è teoricamente il '\0') con appunto il '\0', alias il terminatore di stringa! prova a modificare il listato e vedi se stampa correttamente su file...fammi sapere...ciao

Loading