[C] programmino sulla somma.

indovina
Ho provato un programmino semplice, ma ahimè non mi riesco ad eseguirlo! =_=
Ve lo riporto:

#include <stdio.h>
int main() {
int a;
int b;

scanf("%d" &a);
printf("%d", a);
scanf("%d", &b);
printf("%d", b);

int c;
c = a + b;
printf("\n la somma calcolata: %d", c);
return 0;
}


quando lo compilo con
./somma 
mi libera la shell, senza che il programmino funzioni, anche se con
gcc 
non mi da nessun errore. Dove è lo sbaglio? -.-'

Risposte
eugenio.amitrano
Il programmino sembra corretto ma non ho capito quanto segue:

"clever":
quando lo compilo con
./somma 
mi libera la shell, senza che il programmino funzioni, anche se con
gcc 
non mi da nessun errore. Dove è lo sbaglio? -.-'

hamming_burst
in C di solito le dichiarazioni di variabili sono permesse solo all'inzio di una funzione, anche se non è sempre vero, perciò

printf("%d", b);

int c;
c = a + b; 


non va bene, fai un unico gruppo di dichiarazioni in cima, è buona norma fare così.

poi guarda bene, manca una virgola nel primo scanf ;)

Poi consiglio, per compilare usa
gcc -Wall
che ti dirà anche i warning.

indovina
"ham_burst":
Poi consiglio, per compilare usa
gcc -Wall
che ti dirà anche i warning.


Cioè compilarlo cosi:
gcc -Wall somma.c -o somma

non mi da alcun errore.

Adesso l'ho aggiustato come hai detto tu.
#include <stdio.h>
int main() {
int a;
int b;
int c;

scanf("%d" &a);
printf("%d", a);
scanf("%d", &b);
printf("%d", b);

c = a + b;
printf("\n la somma calcolata: %d", c);
return 0;
}


non mi da nessun warning, ma non funziona neppure ora :( (ho controllato tutti i punti e virgola)

eugenio.amitrano
Come già ti aveva suggerito ham_burst
a scanf("%d" &a); manca la virgola dopo il "%d".

indovina
"eugenio.amitrano":
Come già ti aveva suggerito ham_burst
a scanf("%d" &a); manca la virgola dopo il "%d".


Corretta, corretta...ma nulla :( non capisco l'errore, anche perchè non mi da warnings, ho provato anche con codeblocks, e mi apre il terminale senza nulla scritto, quello dovrebbe apparire tipo
a = numero intero
b = numero intero
c = a + b

hamming_burst
no è un consiglio compilare con quel parametro, molti errori sono nascosti se non si usa, nel tuo caso vuol dire che gcc non ha rilevato nulla.

Non hai capito dove ti ho segnalato, all'interno dello scanf, cioè:

 sbagliato: scanf("%d" &a); 
corretto: scanf("%d", &a); 


consiglio metti il rientro di carrello "\n" alla fine del printf, così avrai da inserire il testo su ogni linea, cioé:
printf("%d\n", a); 


così non dovresti avere più problemi. :-)


@eugenio.amitrano: sorry abbiamo scritto insieme :-)

indovina
Ho 'modificato' anche quello, ho aggiunto la libreria
<math.h
> sperando in qualche miglioramento ma niente, libera la shell.
gcc
non riporta errori, e quando compilo uso
./somma
.
Sto vedendo svariati esempi anche su you tube, e
int c 
non lo scrivono all'inizio ma dopo. :S Sembrava un programmino 'scemo' e invece...

hamming_burst
per la dichiarazione delle variabili all'inizio è una "coding rules", forse quei video sono di esempio. Ma è una regola che ti consiglio di seguire, è una questione di ingegneria del software, vuoi mettere dichiarare dove si vuole una variabile in 10000000000000 di linee...ti faccio immaginare cosa capiti :-)

ma non ti funziona ancora?

per il tuo codice lo ho compilato ora io, questo è il tuo codice:

#include <stdio.h>
int main() {
int a;
int b;
int c;

scanf("%d", &a);
printf("%d\n", a);
scanf("%d", &b);
printf("%d\n", b);

c = a + b;
printf("\n la somma calcolata: %d", c);
return 0;
}


non mi da nessun problema e da esattamente la somma.

inserire la libreria math.h serve per utilizzare funzioni matematiche in questo caso è inutile.

cosa intendi con "libera la shell", e domanda idiota: sei in un Linux o in qualche port?

Ska1
Scusa qual'è il problema?!

Appena lanciato il programma è in attesa che tu inserisca un input, in particolare un intero...l'ho appena eseguito con successo senza alcun problema :|

indovina
xD che niubbo ignorante che sono! Giusto, quello attende che io scriva qualcosa!
Ora ho un' altra domanda da porre: perchè succede una cosa tipo:
5
5
7
7
la somma calcolata: 12


cioè ripete due volte ciò che metto? :S

P.S math.h lo tolgo si?

hamming_burst
scusa se mi faccio na risata :-D

la doppia stampa c'è perchè prima scrivi il numero te, il programma lo legge, e poi lo stampa.

math.h lo includi se utilizzi una funzione che è implementata li dentro tipo pow(), abs(), ecc :-)

indovina
"ham_burst":
scusa se mi faccio na risata :-D

la doppia stampa c'è perchè prima scrivi il numero te, il programma lo legge, e poi lo stampa.


Ah non ti preoccupare! xD la risata me la faccio prima io! ^^

Non so non c'è un modo più pulito per non far comparire due volte lo stesso numero? :D (scusa ma sto imparando da pochissimo questo linguaggio)

hamming_burst
non preoccuparti tutti devono iniziare da qualche parte ;)

bhe semplicemente non lo stampi....

puoi fare un qulcosa di più interattivo, tipo:

printf("Inserisci il primo addendo: ");
scanf("%d,&a);
printf("Inserisci il secondo addendo: ");
scanf("%d,&b);


praticamente catturi il valore e stampi dopo il risultato.


Piccola nota (solo per darti un altro spunto): nella printf puoi inserire anche funzioni tipo
printf("risultato somma: %d\n", (a+b));

indovina
Alcune domande:

Scrivere
scanf("%d,&b);
è scrivere
scanf("%d, &b);
? Cioè quello spazio fa la differenza?

Perchè si scrive nel
printf("risultato somma: %d\n", (a+b));
(a+b)
e non
c
?

hamming_burst
gli spazi non fanno nessunissima differenza, anzi è meglio non tenere tutto allineato a destra o sinistra, ma fare una bella intendazione. solo il rientro di carrello fa degenerare il compilatore (il parser).


printf("risultato somma: %d\n", (a+b));

ci scommettevo che ti facevo confondere, era solo una cosa in più. Te "c" puoi bennissimo metterlo, era solo per dirti che nel printf puoi inserire non solo variabili, ma anche richiamare funzioni direttamente.
Ma lascia stare, aspetta di vedere meglio questi argomenti, intanto concentrati sulle cose basilari.

PS: stai seguendo un corso, o sei autonomo?

indovina
Ah ecco, perchè il prof a lezione ha detto che c'è differenza nello scrivere per esemèpio:
c = a + b
e
c=a+b


Quello di scrivere nel printf
(a+b)
è più una finezza, che il prof non ci ha fatto presente xD

Sto seguendo il corso di informatica generale per programmare in C. Sto facendo i primi esercizi, per capire bene il meccanismo. Se faccio domande 'banali', mi scuso a priori. :) Spero di imparare tante cose per programmare 'decentemente'.

hamming_burst
non c'è differenza semantica ne sintattica tra i due casi. Solo una differenza visiva, se aggiungi operatori o variabili avere più spazi, con parentizzazioni messe bene, aiuta molto a non commettere errori, e a creare bug.

(a+b) non è tanto una finezza è un altro modo per fare la stessa cosa, invece che salvare il valore in una nuova locazione, fai un trasferimento diretto, lo vedrai comunque.
In C ci (che ironia :D ) sono molti modi per fare le stesse cose, è una particolarità (negativa alle volte) di questo linguaggio.

non preoccuparti se chiedi cose banali, questo forum esiste proprio per aiutare tutti, senza guardare il livello di conoscenze. Alla prossima :-)

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