|
|
|
![]() |
|
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 15: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: 10:56.