Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

info linguaggio C

Linguaggi e sistemi

Moderatori: Foto UtentePaolino, Foto Utentefairyvilje

0
voti

[21] Re: info linguaggio C

Messaggioda Foto Utentesmcv85F » 22 ago 2012, 21:04

Ciao Foto Utentelillo anche io qualche tempo fa ebbi lo stesso problema, in quanto stavo studiando un libro il quale nei primi capitoli mi suggeriva di inserire, prima della chiusura del main, la chiamata alla funzione getchar() per bloccare l'esecuzione del programma in attesa della pressione del tasto.
Io a quel punto scrissi il classico "Hello world!" e tutto filò liscio, però poi il secondo programmino iniziò a crearmi problemi:

Codice: Seleziona tutto
#include <stdio.h>

main(){
int a, b, somma, prodotto;
printf("Inserire un primo numero: \n");
scanf("%d", &a);
printf("Inserire un secondo numero: \n");
scanf("%d", &b);
somma=a+b;
prodotto=a*b;
printf("SOMMA: %d \n", somma);
printf("PRODOTTO: %d \n", prodotto);
getchar();
}


In quanto compilato il programma e ricevuto il messaggio di conferma che il tutto va bene, all'esecuzione dopo aver inserito il primo numero e premuto invio, inserisco il secondo numero e premo invio, neanche un secondo e si chiude tutto.
A questo punto subito penso: " ma la getchar() alla fine non serve a bloccare l'esecuzione del programma in attesa della pressione di un tasto? strano..... " , per cercare di capire un po' il problema mi metto alla ricerca e dopo aver girovagato su qualche sito arrivo alla seguente conclusione:

( Detto proprio terra-terra :D ) Ogni volta che viene premuto un tasto, il carattere corrispondente viene inserito in un'opportuna area di memoria, chiamata buffer, poi quando viene eseguita una scanf, i caratteri vengono letti dal buffer e portati nella variabile che deve essere letta, quindi, quando inserisco da tastiera il secondo numero (b), siccome prima premo i tasti corrispondenti alle cifre (ad esempio, 30), e poi batto il tasto "invio", nel buffer vengono scritti 3 caratteri: '3' '0' ed invio, dove il carattere '3' e lo '0' vengono convertiti in numero intero ed assegnati alla variabile b, invece il carattere invio rimane nel buffer.
A questo punto la getchar() inserita alla fine si va a prendere lei il carattere invio ed è questo il motivo per il quale il programma non si blocca ad aspettare il mio invio finale.
Quindi è necessario un qualcosa per pulire il buffer da quell'invio che resta al suo interno, ed a tal fine ho utilizzato la funzione fflush(stdin) subito dopo l'ultimo scanf(), modificando in questa maniera il mio programmino:

Codice: Seleziona tutto
#include <stdio.h>

main(){
int a, b, somma, prodotto;
printf("Inserire un primo numero: \n");
scanf("%d", &a);
printf("Inserire un secondo numero: \n");
scanf("%d", &b);
fflush(stdin);
somma=a+b;
prodotto=a*b;
printf("SOMMA: %d \n", somma);
printf("PRODOTTO: %d \n", prodotto);
getchar();
}


che adesso aspetta per permettere di visualizzare il risultato.

PS: Non so se questa è la soluzione migliore in quanto non sono un programmatore ma un semplice "apprendista", però ho risolto il problema O_/
Avatar utente
Foto Utentesmcv85F
0 2
 
Messaggi: 4
Iscritto il: 22 ago 2012, 17:38

1
voti

[22] Re: info linguaggio C

Messaggioda Foto Utentesimo85 » 22 ago 2012, 21:30

Codice: Seleziona tutto
#include <stdio.h>

int main(void)
{
   int a, b;

   printf("Inserire un primo numero: \n");
   scanf("%d", &a);
   printf("Inserire un secondo numero: \n");
   scanf("%d", &b);
   fflush(stdin);

   printf("SOMMA: %d \n", a + b);
   printf("PRODOTTO: %d \n", a * b);
   getchar();
   
   return  0;
}
Avatar utente
Foto Utentesimo85
30,9k 7 12 13
Disattivato su sua richiesta
 
Messaggi: 9927
Iscritto il: 30 ago 2010, 4:59

0
voti

[23] Re: info linguaggio C

Messaggioda Foto Utentefairyvilje » 22 ago 2012, 21:35

@franx: Perché mai si dovrebbe togliere una funzione contenuta negli header standard del C++?
system("PAUSE") richiama semplicemente il comando pause gestito da cmd.exe sui sistemi windows.
"640K ought to be enough for anybody" Bill Gates (?) 1981
Qualcosa non ha funzionato...

Lo sapete che l'arroganza in informatica si misura in nanodijkstra? :D
Avatar utente
Foto Utentefairyvilje
15,0k 4 9 12
G.Master EY
G.Master EY
 
Messaggi: 3047
Iscritto il: 24 gen 2012, 19:23

0
voti

[24] Re: info linguaggio C

Messaggioda Foto Utentesmcv85F » 22 ago 2012, 21:38

Grazie per la formattazione Foto Utentesimo85 :ok:

PS: Era il secondo mio programma in C quindi il mio modo di programmare era molto rudimentale, non è che adesso sia migliorato molto, ma mi ci sto impegnando :D
Avatar utente
Foto Utentesmcv85F
0 2
 
Messaggi: 4
Iscritto il: 22 ago 2012, 17:38

0
voti

[25] Re: info linguaggio C

Messaggioda Foto UtenteRenzoDF » 22 ago 2012, 22:22

franx ha scritto:... Chi è? ... Un prof di Fondamenti di Informatica? :)

No no, è un Grande scriba che ci aiuta spesso nella risoluzione circuitale. :D
"Il circuito ha sempre ragione" (Luigi Malesani)
Avatar utente
Foto UtenteRenzoDF
55,9k 8 12 13
G.Master EY
G.Master EY
 
Messaggi: 13189
Iscritto il: 4 ott 2008, 9:55

0
voti

[26] Re: info linguaggio C

Messaggioda Foto Utentefranx » 24 ago 2012, 17:03

fairyvilje ha scritto:@franx: Perché mai si dovrebbe togliere una funzione contenuta negli header standard del C++?


???

fairyvilje ha scritto:system("PAUSE") richiama semplicemente il comando pause gestito da cmd.exe sui sistemi windows.


Su questo non avevo dubbi :)
Avatar utente
Foto Utentefranx
465 3 10
Frequentatore
Frequentatore
 
Messaggi: 199
Iscritto il: 28 feb 2010, 17:43

0
voti

[27] Re: info linguaggio C

Messaggioda Foto Utentefranx » 24 ago 2012, 17:10

franx ha scritto:... Chi è? ... Un prof di Fondamenti di Informatica? :)

RenzoDF ha scritto:No no, è un Grande scriba che ci aiuta spesso nella risoluzione circuitale. :D


Buono a sapersi :)
Avatar utente
Foto Utentefranx
465 3 10
Frequentatore
Frequentatore
 
Messaggi: 199
Iscritto il: 28 feb 2010, 17:43

0
voti

[28] Re: info linguaggio C

Messaggioda Foto Utentefairyvilje » 24 ago 2012, 17:40

franx ha scritto:Ottimo. Ma almeno ha tolto la necessità del sytem("pause")?

Non mi è chiaro cosa intendevi con questa frase :)
"640K ought to be enough for anybody" Bill Gates (?) 1981
Qualcosa non ha funzionato...

Lo sapete che l'arroganza in informatica si misura in nanodijkstra? :D
Avatar utente
Foto Utentefairyvilje
15,0k 4 9 12
G.Master EY
G.Master EY
 
Messaggi: 3047
Iscritto il: 24 gen 2012, 19:23

0
voti

[29] Re: info linguaggio C

Messaggioda Foto Utentefranx » 25 ago 2012, 9:15

fairyvilje ha scritto:Non mi è chiaro cosa intendevi con questa frase :)


Chiedevo se nella nuova versione di Dev-C++ , c'è ancora bisogno di aggiungere system("pause") nei programmi da console (che mi aveva fatto odiare il vecchio Dev-C++ :)
Avatar utente
Foto Utentefranx
465 3 10
Frequentatore
Frequentatore
 
Messaggi: 199
Iscritto il: 28 feb 2010, 17:43

0
voti

[30] Re: info linguaggio C

Messaggioda Foto Utentelillo » 25 ago 2012, 11:00

si, se crei un nuovo progetto, necessita di sistem ("pause") per non uscire direttamente. ho provato ieri :ok:
Avatar utente
Foto Utentelillo
20,5k 7 12 13
G.Master EY
G.Master EY
 
Messaggi: 4176
Iscritto il: 25 nov 2010, 11:30
Località: Nuovo Mondo

PrecedenteProssimo

Torna a PC e informatica

Chi c’è in linea

Visitano il forum: Nessuno e 30 ospiti