[c] somma di numeri da stringa
Ciao,
ho scritto questo piccolo programma a scopo didattico, per comprendere l'uso della sscanf()..
In pratica inserisco i valore letterali di 4 numeri e poi li sommo...
ma ho un problema...mi restituisce sempre $0$..
ho scritto questo piccolo programma a scopo didattico, per comprendere l'uso della sscanf()..
#include <stdio.h> int main(void) { char riga1[10],riga2[10],riga3[10],riga4[10]; printf("Inserire 4 numeri in forma letterale.\n"); scanf("%c %c %c %c",riga1,riga2,riga3,riga4); int a=0,b=0,c=0,d=0; sscanf(riga1,"%d",&a); sscanf(riga2,"%d",&b); sscanf(riga3,"%d",&c); sscanf(riga4,"%d",&d); printf("%d\n",a+b+c+d); }
In pratica inserisco i valore letterali di 4 numeri e poi li sommo...
ma ho un problema...mi restituisce sempre $0$..

Risposte
Ciao,
ho provato il tuo codice e funziona correttamente. Guarda questa immagine:

ho provato il tuo codice e funziona correttamente. Guarda questa immagine:


Ma no, non funziona!
Ho modificato un paio di cose, ma il problema sta nelle sscanf che mi restituiscono tutte zero!
#include <stdio.h> int main(void) { char riga1[10],riga2[10],riga3[10],riga4[10]; printf("Inserire 4 numeri in forma letterale.\n"); scanf("%s %s %s %s",riga1,riga2,riga3,riga4); printf(" %s ",riga1); int a=0,b=0,c=0,d=0; sscanf(riga1,"%d",&a); sscanf(riga2,"%d",&b); sscanf(riga3,"%d",&c); sscanf(riga4,"%d",&d); printf("%d\n",a+b+c+d); }
Ho modificato un paio di cose, ma il problema sta nelle sscanf che mi restituiscono tutte zero!

Ti ripeto che funziona... questo è l'output con il tuo ultimo codice:

Io inserisco 1 2 3 4 e ottengo 1 (stampa del primo numero) e 10 (somma dei quattro numeri). Qual è il problema? Tu cosa inserisci come input? Non scriverai mica "uno", "due", ecc, vero?

Io inserisco 1 2 3 4 e ottengo 1 (stampa del primo numero) e 10 (somma dei quattro numeri). Qual è il problema? Tu cosa inserisci come input? Non scriverai mica "uno", "due", ecc, vero?
ebbene si ;-(
io volevo fare qualcosa che trasformasse "quattro" in 4 e poi sommasse..
io volevo fare qualcosa che trasformasse "quattro" in 4 e poi sommasse..
Ah ecco, sospettavo... 
In questo caso non puoi certo pretendere che il codice che hai scritto riesca a convertire "quattro" nel numero 4.
Dovrai insegnarglielo tu: leggi una stringa e la confronti con "uno", "due", ecc.

In questo caso non puoi certo pretendere che il codice che hai scritto riesca a convertire "quattro" nel numero 4.
Dovrai insegnarglielo tu: leggi una stringa e la confronti con "uno", "due", ecc.
ok, ma a quel punto la sscanf come la uso e per cosa?? Confusione...
Puoi utilizzarla per spezzare un input del tipo "uno due tre quattro".
Perché il carattere '4' in ASCII, per esempio, non è il numero 4. E "10" non è neanche un carattere ma è una stringa di due caratteri!
Insomma in ASCII '4' è numericamente uguale a 52. Se non ci credi prova a sommare
Fai inoltre attenzione ad usare %s per le stringhe.
Fare il codice che richiedi tu è molto più lungo, seppur non troppo complesso. Inoltre deve essere fatto per ogni lingua.
Insomma in ASCII '4' è numericamente uguale a 52. Se non ci credi prova a sommare
(int)'1' + '2' + '3' + '4'per lavorarci sopra non hai comunque bisogno necessariamente di sscanf ma puoi usare direttamente atoi che è contenuta in stdlib.
Fai inoltre attenzione ad usare %s per le stringhe.
Fare il codice che richiedi tu è molto più lungo, seppur non troppo complesso. Inoltre deve essere fatto per ogni lingua.
GRAZIE ad entrambi! Alla fine ho fatto due versioni: una con la atoi e l'altra con la sscanf e funzionavano entrambe! Grazie!

