|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Junior Member
Iscritto dal: Sep 2009
Messaggi: 4
|
[C] un neofita cerca aiuto, si chiude il prompt dei comandi
Salve a tutti, spero di non aver sbagliato sezione, ma sono nuovo
![]() Vado al dunque subito, frequento ing. civile, e stiamo facendo il corso di programmazione, per il momento non ci sono state spiegate molte cose, ma nonostante tutto volevo provare a fare qualcosa a casa... Mi è venuto in mente un programma che visualizzasse semplicemente la somma di due numeri, vi posto il codice: #include<stdio.h> main() { printf("Inserire il primo numero"); scanf("x"); printf("Inserire il secondo numero"); scanf("y"); printf("x+y"); } peccato che c'è un problema, non appena inserisco il primo numero e premo invio, non faccio quasi neanche in tempo a leggere inserire il secondo numero che il prompt dei comandi si chiude, come mai? come lo risolvo? Ultima modifica di emanuele.g : 30-09-2009 alle 17:23. |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 1059
|
a parte il fatto che quello non è assolutamente un codice funzionante
![]() sintassi di scanf, variabili e cose del genere, mai sentite eh? ![]() Ultima modifica di Energy++ : 30-09-2009 alle 18:29. |
![]() |
![]() |
![]() |
#3 |
Junior Member
Iscritto dal: Sep 2009
Messaggi: 4
|
usandolo con dev C++ sembra funzionare...
almeno l'inizio |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
|
Energy++, in effetti se ci pensi é vero
![]() prima legge degli input dallo standard input (sconquassando lo stack ![]() ![]() bah, sono senza parole ![]() la mia versione: Codice:
#include <stdlib.h> #include <stdio.h> int main() { int x, y; printf("inserire il primo numero: "); scanf("%d", &x); printf("inserire il secondo numero: "); scanf("%d", &y); printf("la somma é %d\n", x + y); return 0; } |
![]() |
![]() |
![]() |
#5 |
Junior Member
Iscritto dal: Sep 2009
Messaggi: 4
|
della serie perculiamo uno se non è capace, bel comportamento, complimenti
per il momento me l'han spiegata così,non credevo mancassero dei pezzi, del resto l'avevo detto che ero all'inizio... cazzo sfottete poi...:-| |
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 1059
|
Quote:
1. o non hai letto nemmeno 1 pagina di teoria 2. o quelli che che ti hanno detto che si fa in quel modo sono degli incompetenti 3. o tu hai capito male e quindi ti consiglio di cominciare a prendere il bel libro di C e iniziare a studiare |
|
![]() |
![]() |
![]() |
#7 | ||
Senior Member
Iscritto dal: Jul 2006
Città: Tristram
Messaggi: 517
|
Quote:
Quote:
__________________
Il sole è giallo |
||
![]() |
![]() |
![]() |
#8 |
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
|
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 1059
|
chiedo scusa per la svista
Ultima modifica di Energy++ : 30-09-2009 alle 18:36. |
![]() |
![]() |
![]() |
#10 |
Member
Iscritto dal: Jul 2009
Messaggi: 210
|
Ciao,
questo codice non può funzionare perchè non usi in modo appropriato le varie funzioni. Non ti compare la seconda stringa "Inserire il secondo numero" perchè il programma và in crash per via dell'utilizzo improprio, appunto, della funzione scanf. Il mio consiglio, prima di continare è quello di cercare a mano a mano, su Google le varie funzioni e cercare di capire come si usano, quali parametri accettano e quali risultati restituiscono. Ovviamente la base, ovvero, i principi elementari di un programma, il significato di una return perchè si deve usare per forza main() etc, tra cui i tipi di dati esistenti nel C sono d'obbligo. La prima riga: Codice:
#include <stdio.h> Praticamente gli dice includi nel sorgente da compilare il contenuto del file header di nome "stdio" (standard I/O). Questo header contiene le dichiarazioni (che si differenzia dalla definizione, per maggiori info su wiki cerca i due termini) delle funzioni primarie per la gestione dello standard input e output (in C referenziati come stdin e stdout) Codice:
main() Codice:
int main(){ ![]() Il programma deve necessariamente contenere una funzione di nome main in quanto è l'entry point, la locazione di memoria da cui comincerà l'esecuzione del programma. In assenza riceverai un errore durante la compilazione dell'eseguibile. Codice:
printf("Inserire il primo numero"); Codice:
printf("Inserire il primo numero: "); Innanzitutto, la scanf è dichiarata come: Codice:
int scanf(char *format, args ...) Ora sapendo che: per forza di cose una variabile deve essere dichiarata PRIMA del suo utilizzo, capirai che prima di usare quella funzione te devi dichiarare una variabile per contenere il valore. Per ordine le variabili andrebbero poste all'inizio del programma. Adesso con i nuovi standard è possibile mettere le varibili appena prima del loro utilizzo, ma, prendi con le pinze quanto stò per dirti, una volta era obbligatorio definire all'inizio del blocco di codice (un blocco è racchiuso tra {} -semplice terminologia, niente di chè-). Alla fine ti mostro un esempio funzionante ora, invece, riscrivo solo la funzione in una funzionante: Codice:
scanf("%d", &x);//supponendo di aver già dichiarato X come int //la e commerciale dice al compilatore di passare l'indirizzo della variabile anzichè passarne una copia. Codice:
printf("x+y"); Per ottenere il risultato che ti aspetti devi usare una piccola convenzione C: Codice:
printf("%d", (x+y))//ecco che ritorna %d che indica ancora una volta che verrà passato un intero //per maggiori info basta una semplice impolverata sulle basi di I/O Quasi perchè manca la funzione return, che restituisce un valore intero. 0 indica terminazione con successo, altri valori indicano uno stato d'errore. A questo punto il sorgente funzionante è: Codice:
#include <stdio.h> int main() { //apro il blocco di istruzioni int x,y; //la virgola mi permette di istanziare più variabili in una sola istruzione; printf("Inserisci il primo numero: "); scanf("%d", &x); //salvo il valore immesso nella var x printf("Inserisci ora il secondo numero: ");// qui, curiosità ti trovi a capo la stringa // poichè la pressione di Enter o Invio per la scanf causa un ritorno a capo. scanf("%d", &y); //ora salvo in y printf("Il risultato della addizione di x(%d) + y(%d) è:%d", x, y, (x+y)); // Come vedi per ogni occorrenza della sequenza di caratteri %d ho immesso // dopo un valore del tipo intero (avendo usato %d). In caso contrario si // solleverebbe una eccezione return 0;//restituisco 0, terminazione con successo }//chiudo il blocco di istruzioni Buona serata.
__________________
La disumanità del computer sta nel fatto che, una volta programmato e messo in funzione, si comporta in maniera perfettamente onesta.
Isaac Asimov |
![]() |
![]() |
![]() |
#11 |
Member
Iscritto dal: Jul 2009
Messaggi: 210
|
Chiedo scusa per il doppio post consecutivo. Ma ho sbagliato a cliccare tra modifica e quote.
Un consiglio: Codice:
ca**o sfottete poi...:-|
__________________
La disumanità del computer sta nel fatto che, una volta programmato e messo in funzione, si comporta in maniera perfettamente onesta.
Isaac Asimov |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 15:39.