|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Dec 2008
Città: Trevis
Messaggi: 2251
|
[C] problema inspiegabile
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 Codice:
#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;
}
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 davvero, ci ho perso la notte a cercar di capire perchè. Codice:
char nome_file[100]; int i=0; while((nome_file[i]=getchar())!= '\n') i++; nome_file[i]='\0'; |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jul 2008
Città: Roma
Messaggi: 542
|
A me funziona in tutti e due modi, a patto che tu corregga questa
Codice:
int risultato[10], i, k=0, n=-1, somma=0; |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Dec 2008
Città: Trevis
Messaggi: 2251
|
WOW lorenzo001 SEI UN GRANDE
Grazie mille davvero, mi hai salvato diverse ore di lavoro, ormai volevo buttarlo sto algoritmo! Col fatto che col primo sistema funzionava e che la sostituzione per accettare input da tastiera era giusta non sapevo più a cosa dar la colpa. alla prossima, ciao Ultima modifica di TecnologY : 02-12-2012 alle 16:07. |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
In effetti lo riscriverei con la strtok
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 16:53.



















