TecnologY
02-12-2012, 07:08
Ho sto programma che riceve come input una stringa contenente dei numeri scritti in lettere e terminati da stop; il programma calcola la somma
es: uno stop due tre uno stop
risultato stampa 232
la cosa inspiegabile è che funziona se i numeri li scrivo nel programma, mentre se li faccio prendere da tastiera no, MA CHE SENSO HA :confused: :help:
#include <stdio.h>
#include <string.h>
#include <math.h>
int SommaInteri(char nome_file[]);
int Valore(char gigi[]);
int final(int risultato[], int *n);
int main()
{
char nome_file[]="uno tre stop";
printf("La somma e' %d", SommaInteri(nome_file));
return 0;
}
int SommaInteri(char nome_file[])
{char gigi[21];
int risultato[10], i, k=0, n=-1, somma;
for(i=0; i<=strlen(nome_file); i++, k++){
if((nome_file[i]!=' ')&&(nome_file[i]!='\0')){
gigi[k]=nome_file[i];
}
else {
gigi[k]='\0';
n++;
risultato[n]=Valore(gigi);
if(strcmp(gigi,"stop") == 0) {
somma += final(risultato, &n);}
k=-1; }
}
return somma;
}
int final(int risultato[], int *n){
int i=0, somma=0;
while((*n)>0){
somma+=(risultato[i]*pow(10,((*n)-1)));
i++;
(*n)--;
}
(*n)=-1;
return somma;
}
int Valore(char gigi[]){
if (strcmp(gigi,"uno") == 0)
return 1;
else if (strcmp(gigi,"due") == 0)
return 2;
else if (strcmp(gigi,"tre") == 0)
return 3;
else if (strcmp(gigi,"quattro") == 0)
return 4;
else if (strcmp(gigi,"cinque") == 0)
return 5;
else if (strcmp(gigi,"sei") == 0)
return 6;
else if (strcmp(gigi,"sette") == 0)
return 7;
else if (strcmp(gigi,"otto") == 0)
return 8;
else if (strcmp(gigi,"nove") == 0)
return 9;
else
return 0;
}
Se sostituisco la riga in grosso con queste riportate sotto, affinchè si possano dare input da tastiera... (e da tastiera digito una qualsiasi stringa in formato corretto) NON VA, butta fuori un numero assurdo, ma com'è possibile??
Ho scritto anche un programma per verificare se con l'input da tastiera c'erano errori ma NADA, alla fine la stringa "nome_file" viene identica a quella definita all'interno del programma ad una verifica con "printf", però con l'input da tastiera non vuole saperne di andare.
Se qualcuno sa il perchè gli faccio un monumento :sofico:
davvero, ci ho perso la notte a cercar di capire perchè.:muro:
char nome_file[100];
int i=0;
while((nome_file[i]=getchar())!= '\n')
i++;
nome_file[i]='\0';
es: uno stop due tre uno stop
risultato stampa 232
la cosa inspiegabile è che funziona se i numeri li scrivo nel programma, mentre se li faccio prendere da tastiera no, MA CHE SENSO HA :confused: :help:
#include <stdio.h>
#include <string.h>
#include <math.h>
int SommaInteri(char nome_file[]);
int Valore(char gigi[]);
int final(int risultato[], int *n);
int main()
{
char nome_file[]="uno tre stop";
printf("La somma e' %d", SommaInteri(nome_file));
return 0;
}
int SommaInteri(char nome_file[])
{char gigi[21];
int risultato[10], i, k=0, n=-1, somma;
for(i=0; i<=strlen(nome_file); i++, k++){
if((nome_file[i]!=' ')&&(nome_file[i]!='\0')){
gigi[k]=nome_file[i];
}
else {
gigi[k]='\0';
n++;
risultato[n]=Valore(gigi);
if(strcmp(gigi,"stop") == 0) {
somma += final(risultato, &n);}
k=-1; }
}
return somma;
}
int final(int risultato[], int *n){
int i=0, somma=0;
while((*n)>0){
somma+=(risultato[i]*pow(10,((*n)-1)));
i++;
(*n)--;
}
(*n)=-1;
return somma;
}
int Valore(char gigi[]){
if (strcmp(gigi,"uno") == 0)
return 1;
else if (strcmp(gigi,"due") == 0)
return 2;
else if (strcmp(gigi,"tre") == 0)
return 3;
else if (strcmp(gigi,"quattro") == 0)
return 4;
else if (strcmp(gigi,"cinque") == 0)
return 5;
else if (strcmp(gigi,"sei") == 0)
return 6;
else if (strcmp(gigi,"sette") == 0)
return 7;
else if (strcmp(gigi,"otto") == 0)
return 8;
else if (strcmp(gigi,"nove") == 0)
return 9;
else
return 0;
}
Se sostituisco la riga in grosso con queste riportate sotto, affinchè si possano dare input da tastiera... (e da tastiera digito una qualsiasi stringa in formato corretto) NON VA, butta fuori un numero assurdo, ma com'è possibile??
Ho scritto anche un programma per verificare se con l'input da tastiera c'erano errori ma NADA, alla fine la stringa "nome_file" viene identica a quella definita all'interno del programma ad una verifica con "printf", però con l'input da tastiera non vuole saperne di andare.
Se qualcuno sa il perchè gli faccio un monumento :sofico:
davvero, ci ho perso la notte a cercar di capire perchè.:muro:
char nome_file[100];
int i=0;
while((nome_file[i]=getchar())!= '\n')
i++;
nome_file[i]='\0';