PDA

View Full Version : [C] problema inspiegabile


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';

lorenzo001
02-12-2012, 10:33
A me funziona in tutti e due modi, a patto che tu corregga questa

int risultato[10], i, k=0, n=-1, somma=0;

TecnologY
02-12-2012, 14:57
WOW lorenzo001 SEI UN GRANDE :D :D :D

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

gugoXX
04-12-2012, 06:05
In effetti lo riscriverei con la strtok