[c] somma di numeri da stringa

frab1
Ciao,
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$.. :roll:

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



:smt039

frab1
Ma no, non funziona!
#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! :-(

minomic
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?

frab1
ebbene si ;-(

io volevo fare qualcosa che trasformasse "quattro" in 4 e poi sommasse..

minomic
Ah ecco, sospettavo... :-D
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.

frab1
ok, ma a quel punto la sscanf come la uso e per cosa?? Confusione...

minomic
Puoi utilizzarla per spezzare un input del tipo "uno due tre quattro".

vict85
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
(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.

frab1
GRAZIE ad entrambi! Alla fine ho fatto due versioni: una con la atoi e l'altra con la sscanf e funzionavano entrambe! Grazie! :) :smt023

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.