Forum - C/C++
- comparazione stringhe... - Pagina 2
Pagine: [ 1 2 3 ]
|
giocala88 (Normal User)
Expert
Messaggi: 248
Iscritto: 23/04/2008
scusami ancora ma a me questa funzione non va..tu xcaso hai provato??..a me non prende l'input...bah?! ...comunque grazie ancora..
theprogrammer (Normal User)
Guru^2
Messaggi: 2509
Iscritto: 28/01/2009
Se mi dici che "non va" non posso farci molto ...
Invece, se mostri il codice posso dirti dove sbagli ...
giocala88 (Normal User)
Expert
Messaggi: 248
Iscritto: 23/04/2008
Scusami, è vero...comunque il codice è il seguente:
void leggi_da_file_inserimento(DatabaseClienti *dat)
{
FILE *file_clienti1,
*file_clienti2,
*file_clienti3,
*file_clienti4,
*file_clienti5,
*file_clienti6,
*file_clienti7,
*file_clienti8,
*file_clienti9,
*file_clienti10;
dat->nome_cognomeClienti = 0; /* variabile di tipo puntatore a struttura inizializzata a zero */
int chiavi_lette;
char nome_cognome[10],
nome[10],
cognome[10],
stringa[10000];
file_clienti1 = fopen("cliente1.txt", "r");
file_clienti2 = fopen("cliente2.txt", "r");
file_clienti3 = fopen("cliente3.txt", "r");
file_clienti4 = fopen("cliente4.txt", "r");
file_clienti5 = fopen("cliente5.txt", "r");
file_clienti6 = fopen("cliente6.txt", "r");
file_clienti7 = fopen("cliente7.txt", "r");
if(file_clienti1 == NULL)
{
file_clienti1 = fopen("cliente1.txt", "w");
printf("\n NOME: ");
scanf("%s", nome);
printf("\n COGNOME: ");
scanf("%s", cognome);
printf("\n SCHEDA: \n");
fgets(*stringa, 10000, stdin);
fprintf(file_clienti1, " NOME: %5s\n", nome);
fprintf(file_clienti1, " COGNOME: %5s\n", cognome);
fprintf(file_clienti1, " SCHEDA: %s\n", stringa);
}
else if(file_clienti2 == NULL)
{
file_clienti2 = fopen("cliente2.txt", "w");
printf("\nnome: ");
scanf("%s", nome);
printf("\ncognome: ");
scanf("%s", cognome);
fprintf(file_clienti2, "nome: %5s\n", nome);
fprintf(file_clienti2, "cognome: %5s\n", cognome);
}
else if(file_clienti3 == NULL)
{
file_clienti3 = fopen("cliente3.txt", "w");
printf("\nnome: ");
scanf("%s", nome);
printf("\ncognome: ");
scanf("%s", cognome);
fprintf(file_clienti3, "nome: %5s\n", nome);
fprintf(file_clienti3, "cognome: %5s\n", cognome);
}
else if(file_clienti4 == NULL)
{
file_clienti4 = fopen("cliente4.txt", "w");
printf("\nnome: ");
scanf("%s", nome);
printf("\ncognome: ");
scanf("%s", cognome);
fprintf(file_clienti4, "nome: %5s\n", nome);
fprintf(file_clienti4, "cognome: %5s\n", cognome);
}
else if(file_clienti5 == NULL)
{
file_clienti5 = fopen("cliente5.txt", "w");
printf("\nnome: ");
scanf("%s", nome);
printf("\ncognome: ");
scanf("%s", cognome);
fprintf(file_clienti5, "nome: %5s\n", nome);
fprintf(file_clienti5, "cognome: %5s\n", cognome);
}
else if(file_clienti6 == NULL)
{
file_clienti6 = fopen("cliente6.txt", "w");
printf("\nnome: ");
scanf("%s", nome);
printf("\ncognome: ");
scanf("%s", cognome);
fprintf(file_clienti6, "nome: %5s\n", nome);
fprintf(file_clienti6, "cognome: %5s\n", cognome);
}
else if(file_clienti7 == NULL)
{
file_clienti7 = fopen("cliente7.txt", "w");
printf("\nnome: ");
scanf("%s", nome);
printf("\ncognome: ");
scanf("%s", cognome);
fprintf(file_clienti7, "nome: %5s\n", nome);
fprintf(file_clienti7, "cognome: %5s\n", cognome);
}
else
{
printf("\n Database pieno:\n");
printf("\n Memoria insufficiente per memorizzare altri clienti!\n");
}
/* chiudi i file */
fclose(file_clienti1);
fclose(file_clienti2);
fclose(file_clienti3);
fclose(file_clienti4);
fclose(file_clienti5);
fclose(file_clienti6);
fclose(file_clienti7);
}
Dov'è il èproblema??..non legge l'input scheda. Il programma termina senza inserire l'input...grazie...
theprogrammer (Normal User)
Guru^2
Messaggi: 2509
Iscritto: 28/01/2009
Perche' hai scritto
fgets(*stringa, 10000, stdin);
??? Ti avevo detto
fgets(stringa, 10000, stdin);
perche' il primo parametro deve essere il puntatore e stringa e' gia' il puntatore ...
P.S. Quando posti il codice, deve essere completo, ordinato e compilabile.
giocala88 (Normal User)
Expert
Messaggi: 248
Iscritto: 23/04/2008
Allora mi scusa ancora una volta, ma il programma non va uguale.. ..
/*****************************/
/* inclusione delle librerie */
/*****************************/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
/******************************/
/* definizioni delle costanti */
/******************************/
#define MAX_CLIENTI 10 /* numero massimo di clienti */
typedef struct
{
char nome[10],
cognome[10],
scheda[10],
campo_nome[10],
campo_cognome[10],
campo_scheda[10000];
} Database;
typedef struct
{
Database vett_clienti[MAX_CLIENTI];
int nome_cognomeClienti;
} DatabaseClienti;
void leggi_da_file_inserimento(DatabaseClienti *dat);
void leggi_da_file(DatabaseClienti *dat);
int main()
{
char nome_cognome[10],
nome[10],
cognome[10];
int n;
DatabaseClienti database; /* variabile database di tipo struttura */
FILE *file_clienti1,
*file_clienti2,
*file_clienti3,
*file_clienti4,
*file_clienti5,
*file_clienti6,
*file_clienti7,
*file_clienti8,
*file_clienti9,
*file_clienti10;
printf("\n - MENU' DI SCELTA -\n");
printf("\n [1] Ricerca");
printf("\n [2] Inserimento\n");
printf("\n Inserire il numero presente in parentesi per selezionare: ");
scanf("%d", &n);
int leggi_interno_file;
if(n == 1)
leggi_da_file(&database);
else if(n == 2)
leggi_da_file_inserimento(&database);
return 0;
}
/* definizione della funzione per leggere da file */
void leggi_da_file_inserimento(DatabaseClienti *dat)
{
FILE *file_clienti1,
*file_clienti2,
*file_clienti3,
*file_clienti4,
*file_clienti5,
*file_clienti6,
*file_clienti7,
*file_clienti8,
*file_clienti9,
*file_clienti10;
dat->nome_cognomeClienti = 0; /* variabile di tipo puntatore a struttura inizializzata a zero */
int chiavi_lette;
char nome_cognome[10],
nome[10],
cognome[10],
stringa[10000];
file_clienti1 = fopen("cliente1.txt", "r");
file_clienti2 = fopen("cliente2.txt", "r");
file_clienti3 = fopen("cliente3.txt", "r");
file_clienti4 = fopen("cliente4.txt", "r");
file_clienti5 = fopen("cliente5.txt", "r");
file_clienti6 = fopen("cliente6.txt", "r");
file_clienti7 = fopen("cliente7.txt", "r");
if(file_clienti1 == NULL)
{
file_clienti1 = fopen("cliente1.txt", "w");
printf("\n NOME: ");
scanf("%s", nome);
printf("\n COGNOME: ");
scanf("%s", cognome);
printf("\n SCHEDA: \n");
fgets(stringa, 10000, stdin);
fprintf(file_clienti1, " NOME: %5s\n", nome);
fprintf(file_clienti1, " COGNOME: %5s\n", cognome);
fprintf(file_clienti1, " SCHEDA: %s\n", stringa);
}
else if(file_clienti2 == NULL)
{
file_clienti2 = fopen("cliente2.txt", "w");
printf("\nnome: ");
scanf("%s", nome);
printf("\ncognome: ");
scanf("%s", cognome);
fprintf(file_clienti2, "nome: %5s\n", nome);
fprintf(file_clienti2, "cognome: %5s\n", cognome);
}
else if(file_clienti3 == NULL)
{
file_clienti3 = fopen("cliente3.txt", "w");
printf("\nnome: ");
scanf("%s", nome);
printf("\ncognome: ");
scanf("%s", cognome);
fprintf(file_clienti3, "nome: %5s\n", nome);
fprintf(file_clienti3, "cognome: %5s\n", cognome);
}
else if(file_clienti4 == NULL)
{
file_clienti4 = fopen("cliente4.txt", "w");
printf("\nnome: ");
scanf("%s", nome);
printf("\ncognome: ");
scanf("%s", cognome);
fprintf(file_clienti4, "nome: %5s\n", nome);
fprintf(file_clienti4, "cognome: %5s\n", cognome);
}
else if(file_clienti5 == NULL)
{
file_clienti5 = fopen("cliente5.txt", "w");
printf("\nnome: ");
scanf("%s", nome);
printf("\ncognome: ");
scanf("%s", cognome);
fprintf(file_clienti5, "nome: %5s\n", nome);
fprintf(file_clienti5, "cognome: %5s\n", cognome);
}
else if(file_clienti6 == NULL)
{
file_clienti6 = fopen("cliente6.txt", "w");
printf("\nnome: ");
scanf("%s", nome);
printf("\ncognome: ");
scanf("%s", cognome);
fprintf(file_clienti6, "nome: %5s\n", nome);
fprintf(file_clienti6, "cognome: %5s\n", cognome);
}
else if(file_clienti7 == NULL)
{
file_clienti7 = fopen("cliente7.txt", "w");
printf("\nnome: ");
scanf("%s", nome);
printf("\ncognome: ");
scanf("%s", cognome);
fprintf(file_clienti7, "nome: %5s\n", nome);
fprintf(file_clienti7, "cognome: %5s\n", cognome);
}
else
{
printf("\n Database pieno:\n");
printf("\n Memoria insufficiente per memorizzare altri clienti!\n");
}
/* chiudi i file */
fclose(file_clienti1);
fclose(file_clienti2);
fclose(file_clienti3);
fclose(file_clienti4);
fclose(file_clienti5);
fclose(file_clienti6);
fclose(file_clienti7);
}
/* definizione della funzione per leggere da file */
void leggi_da_file(DatabaseClienti *dat)
{
FILE *file_clienti1,
*file_clienti2,
*file_clienti3,
*file_clienti4,
*file_clienti5,
*file_clienti6,
*file_clienti7;
dat->nome_cognomeClienti = 0; /* variabile di tipo puntatore a struttura inizializzata a zero */
char nome_cognome[10], modifica;
int cont, chiavi_lette, i;
file_clienti1 = fopen("cliente1.txt", "r");
file_clienti2 = fopen("cliente2.txt", "r");
file_clienti3 = fopen("cliente3.txt", "r");
file_clienti4 = fopen("cliente4.txt", "r");
file_clienti5 = fopen("cliente5.txt", "r");
file_clienti6 = fopen("cliente6.txt", "r");
file_clienti7 = fopen("cliente7.txt", "r");
printf("\n Inserire il nome/cognome da cercare: ");
scanf("%s", nome_cognome);
if(file_clienti1 != NULL){
fscanf(file_clienti1,"%s %s %s %s", dat->vett_clienti[dat->nome_cognomeClienti].campo_nome,
dat->vett_clienti[dat->nome_cognomeClienti].nome,
dat->vett_clienti[dat->nome_cognomeClienti].campo_cognome,
dat->vett_clienti[dat->nome_cognomeClienti].cognome);
if(strcmp(dat->vett_clienti[dat->nome_cognomeClienti].nome, nome_cognome) == 0 ||
strcmp(dat->vett_clienti[dat->nome_cognomeClienti].cognome, nome_cognome) == 0)
{
printf("\n cliente1.txt: Nome o cognome presente");
printf(" \n %s: %s\n %s: %s\n",dat->vett_clienti[dat->nome_cognomeClienti].campo_nome,
dat->vett_clienti[dat->nome_cognomeClienti].nome,
dat->vett_clienti[dat->nome_cognomeClienti].campo_cognome,
dat->vett_clienti[dat->nome_cognomeClienti].cognome);
/* printf("\n Vuoi modificare il documento? [Y/N]\n");
scanf("%c", &modifica);
if(modifica == 'Y' ||
modifica == 'y')
{
*/
}
else
printf("\n cliente1.txt: Nome o cognome non presente");
}
if(file_clienti2 != NULL){
fscanf(file_clienti2,"%s %s %s %s", dat->vett_clienti[dat->nome_cognomeClienti].campo_nome,
dat->vett_clienti[dat->nome_cognomeClienti].nome,
dat->vett_clienti[dat->nome_cognomeClienti].campo_cognome,
dat->vett_clienti[dat->nome_cognomeClienti].cognome);
if(strcmp(dat->vett_clienti[dat->nome_cognomeClienti].nome, nome_cognome) == 0 ||
strcmp(dat->vett_clienti[dat->nome_cognomeClienti].cognome, nome_cognome) == 0)
{
printf("\n cliente2.txt: Nome o cognome presente");
printf(" \n %s: %s\n %s: %s\n",dat->vett_clienti[dat->nome_cognomeClienti].campo_nome,
dat->vett_clienti[dat->nome_cognomeClienti].nome,
dat->vett_clienti[dat->nome_cognomeClienti].campo_cognome,
dat->vett_clienti[dat->nome_cognomeClienti].cognome);
}
else
printf("\n cliente2.txt: Nome o cognome non presente");
}
if(file_clienti3 != NULL){
fscanf(file_clienti3,"%s %s %s %s", dat->vett_clienti[dat->nome_cognomeClienti].campo_nome,
dat->vett_clienti[dat->nome_cognomeClienti].nome,
dat->vett_clienti[dat->nome_cognomeClienti].campo_cognome,
dat->vett_clienti[dat->nome_cognomeClienti].cognome);
if(strcmp(dat->vett_clienti[dat->nome_cognomeClienti].nome, nome_cognome) == 0 ||
strcmp(dat->vett_clienti[dat->nome_cognomeClienti].cognome, nome_cognome) == 0)
{
printf("\n cliente3.txt: Nome o cognome presente");
printf(" \n %s: %s\n %s: %s\n",dat->vett_clienti[dat->nome_cognomeClienti].campo_nome,
dat->vett_clienti[dat->nome_cognomeClienti].nome,
dat->vett_clienti[dat->nome_cognomeClienti].campo_cognome,
dat->vett_clienti[dat->nome_cognomeClienti].cognome);
}
else
printf("\n cliente3.txt: Nome o cognome non presente");
}
if(file_clienti4 != NULL){
fscanf(file_clienti4,"%s %s %s %s", dat->vett_clienti[dat->nome_cognomeClienti].campo_nome,
dat->vett_clienti[dat->nome_cognomeClienti].nome,
dat->vett_clienti[dat->nome_cognomeClienti].campo_cognome,
dat->vett_clienti[dat->nome_cognomeClienti].cognome);
if(strcmp(dat->vett_clienti[dat->nome_cognomeClienti].nome, nome_cognome) == 0 ||
strcmp(dat->vett_clienti[dat->nome_cognomeClienti].cognome, nome_cognome) == 0)
{
printf("\n cliente4.txt: Nome o cognome presente");
printf(" \n %s: %s\n %s: %s\n",dat->vett_clienti[dat->nome_cognomeClienti].campo_nome,
dat->vett_clienti[dat->nome_cognomeClienti].nome,
dat->vett_clienti[dat->nome_cognomeClienti].campo_cognome,
dat->vett_clienti[dat->nome_cognomeClienti].cognome);
}
else
printf("\n cliente4.txt: Nome o cognome non presente");
}
if(file_clienti5 != NULL){
fscanf(file_clienti5,"%s %s %s %s", dat->vett_clienti[dat->nome_cognomeClienti].campo_nome,
dat->vett_clienti[dat->nome_cognomeClienti].nome,
dat->vett_clienti[dat->nome_cognomeClienti].campo_cognome,
dat->vett_clienti[dat->nome_cognomeClienti].cognome);
if(strcmp(dat->vett_clienti[dat->nome_cognomeClienti].nome, nome_cognome) == 0 ||
strcmp(dat->vett_clienti[dat->nome_cognomeClienti].cognome, nome_cognome) == 0)
{
printf("\n cliente5.txt: Nome o cognome presente");
printf(" \n %s: %s\n %s: %s\n",dat->vett_clienti[dat->nome_cognomeClienti].campo_nome,
dat->vett_clienti[dat->nome_cognomeClienti].nome,
dat->vett_clienti[dat->nome_cognomeClienti].campo_cognome,
dat->vett_clienti[dat->nome_cognomeClienti].cognome);
}
else
printf("\n cliente5.txt: Nome o cognome non presente");
}
if(file_clienti6 != NULL){
fscanf(file_clienti6,"%s %s %s %s", dat->vett_clienti[dat->nome_cognomeClienti].campo_nome,
dat->vett_clienti[dat->nome_cognomeClienti].nome,
dat->vett_clienti[dat->nome_cognomeClienti].campo_cognome,
dat->vett_clienti[dat->nome_cognomeClienti].cognome);
if(strcmp(dat->vett_clienti[dat->nome_cognomeClienti].nome, nome_cognome) == 0 ||
strcmp(dat->vett_clienti[dat->nome_cognomeClienti].cognome, nome_cognome) == 0)
{
printf("\n cliente6.txt: Nome o cognome presente");
printf(" \n %s: %s\n %s: %s\n",dat->vett_clienti[dat->nome_cognomeClienti].campo_nome,
dat->vett_clienti[dat->nome_cognomeClienti].nome,
dat->vett_clienti[dat->nome_cognomeClienti].campo_cognome,
dat->vett_clienti[dat->nome_cognomeClienti].cognome);
}
else
printf("\n cliente6.txt: Nome o cognome non presente");
}
if(file_clienti7 != NULL){
fscanf(file_clienti7,"%s %s %s %s", dat->vett_clienti[dat->nome_cognomeClienti].campo_nome,
dat->vett_clienti[dat->nome_cognomeClienti].nome,
dat->vett_clienti[dat->nome_cognomeClienti].campo_cognome,
dat->vett_clienti[dat->nome_cognomeClienti].cognome);
if(strcmp(dat->vett_clienti[dat->nome_cognomeClienti].nome, nome_cognome) == 0 ||
strcmp(dat->vett_clienti[dat->nome_cognomeClienti].cognome, nome_cognome) == 0)
{
printf("\n cliente7.txt: Nome o cognome presente");
printf(" \n %s: %s\n %s: %s\n",dat->vett_clienti[dat->nome_cognomeClienti].campo_nome,
dat->vett_clienti[dat->nome_cognomeClienti].nome,
dat->vett_clienti[dat->nome_cognomeClienti].campo_cognome,
dat->vett_clienti[dat->nome_cognomeClienti].cognome);
}
else
printf("\n cliente7.txt: Nome o cognome non presente");
}
else if(file_clienti1 == NULL &&
file_clienti2 == NULL &&
file_clienti3 == NULL &&
file_clienti4 == NULL &&
file_clienti5 == NULL &&
file_clienti6 == NULL &&
file_clienti7 == NULL)
printf("\n Database vuoto\n");
fclose(file_clienti1);
fclose(file_clienti2);
fclose(file_clienti3);
fclose(file_clienti4);
fclose(file_clienti5);
fclose(file_clienti6);
fclose(file_clienti7);
}
PS.grazie soprattutto per la pazienza...
theprogrammer (Normal User)
Guru^2
Messaggi: 2509
Iscritto: 28/01/2009
E insisti con "non va" ...
NON VA NON PERMETTE DI CAPIRE IL PROBLEMA ...
giocala88 (Normal User)
Expert
Messaggi: 248
Iscritto: 23/04/2008
scusa, ma il problema l'ho già detto, non prende l'input "scheda"..è sempre questo il problema!!ma scusa compilandolo non ti sei accorto di ciò??..comunque ti ripeto quando devo prendere l'input scheda, il programma termina..sono stato chiaro????...grazie...
theprogrammer (Normal User)
Guru^2
Messaggi: 2509
Iscritto: 28/01/2009
Postato originariamente da giocala88 :
scusa, ma il problema l'ho già detto, non prende l'input "scheda"..è sempre questo il problema!!ma scusa compilandolo non ti sei accorto di ciò??..comunque ti ripeto quando devo prendere l'input scheda, il programma termina..sono stato chiaro????...grazie...
Intanto quando COMPILI non ti accorgi di un bel niente perche' non ci sono errori IN COMPILAZIONE (fai attenzione, la COMPILAZIONE e' una cosa e l'ESECUZIONE del programma sono cose diverse. Tu hai un errore in ESECUZIONE non in COMPILAZIONE).
L'input di scheda avviene REGOLARMENTE (a parte il fatto che non capisco perche' imposti nome e cognome con appena 10 caratteri) e te ne puoi accorgere se VISUALIZZI scheda (che poi chiami stringa, che confusione ...) SUBITO dopo la fgets.
Il problema che hai e' SICURAMENTE DOPO, ma dato che NON si capisce assolutamente quello che vuoi fare perche' ci sono decine di file aperti (senza motivo) e codice di cui NON si capisce l'utilita', si deve capire DOVE hai il problema che lamenti.
Il consiglio e' di eseguire PASSO PASSO in DEBUG, linea dopo linea il programma e capire IN QUALE LINEA DOPO la fgets il programma ha problemi ...