View Full Version : Suggerimento C++
#include <iostream.h>
using namespace std;
int main()
{
int liters, gallons;
cout<<"inserisci il numero dei galloni: ";
cin>>gallons;
cin.get();
liters = gallons * 4;
cout<<"Liters: "<<liters;
cin.get();
return 0;
}
Facendo cosi, sono costretto scrivere cin.get() 2 volte, non c'è un'alternativa.
Magari posizionarlo in qualche posizione strategica. altrimenti non posso "leggere" il programma.
/\/\@®¢Ø
09-01-2004, 17:52
L'output di cout e bufferizzato, se vuoi vedere il risultato devi chiamare una flush() sul canale o in alternativa, spedisci un endl che oltre a andaer a capo fa il "flush" automaticamente.
Una cin.get() funziona perche' i due canali sono collegati e una chiamata a cin fa svuotare automaticamente il cout.
Sempreche' non ci sia di mezzo anche un compilatore vecchio e imperfetto (*cough*VC6*cough*) ad aggiungere bugs.
[code]
#include <iostream> // Niente .h !!!
using namespace std;
int main()
{
int liters, gallons;
cout<<"inserisci il numero dei galloni: ";
cout.flush();
cin>>gallons;
liters = gallons * 4;
cout<<"Liters: "<<liters;
cout.flush();
return 0;
}
ma se metto #include <stdlib>, potrei anche fare a meno di inserire namespace std? dato che la libreria in questione include anche quest'ultimo elemento?.
inoltre dato che siamo in tema, a che serve il comando void
e quando c'èè bisogno di usarlo.
(senza usare termini fantascientifici).
/\/\@®¢Ø
09-01-2004, 18:57
No, il namespace std e l'intestazione stdlib non sono affatto correlate.
stdlib si riferisce alla libreria standard del C, mentre il namespace std e' una cosa relativa solo al C++.
Il significato del void dipende un po' dal contesto, ma sostanzialmente e' una parola chiave che vuol dire che "non c'e' un tipo".
Ad esempio quando dichiaro una funzione che non ritorna valori, scrivo qualcosa di simile al seguente:
void foo(int c);
(potrebbe sembrare piu' ragionevole evitare del tutto di indicare il tipo di ritorno, ma storicamente nel C una funzione dichiarata senza tipo di ritorno era una funzione che ritornava un intero)
In alternativa potresti trovare una dichiarazione di funzione C del tipo
int foo(void);
che e' un modo per indicare che la funzione non ha parametri. Nel C++ la dichiari semplicemente
int foo();
Infine puoi trovare un "puntatore a void", che indica che stai trattando memoria grezza, non riferita ad un tipo particolare. L'esempio classico e' la funzione C malloc che alloca la memoria richiesta e ritorna un puntatore ad una zona di memoria non inizializzata.
spero di averti chiarito le idee
Se non sbaglio le librerie C senza il ".h" sono equivalenti alle altre, ma importate nel namespace std...
Quindi #include <stdlib.h> diventa:
#include <cstdlib>
using namespace std;
sempre che si voglia avere visibili tutte le funzioni di stdlib...
Potreste dirmi, che cos'è che non va nel mio codice.
Parte (0 errori), ma al posto dei caratteri "finali"(cioè quelli che dovrebbe rilevare dalla tastiera) visualizza le "p". e " "(il vuoto)
#include <iostream.h>
#include <stdio.h>
int main()
{
char carattere;
char numero;
printf("inserisci un carattere, e poi premi INVIO: ");
scanf("%c",& carattere);
printf("inserisci un numero: ");
scanf("%d",&numero);
printf("il carattere da te digitato è :%c\n",carattere);
printf("il numero da te inserito è : %d\n",numero);
cin.get();
cin.get();
return 0;
}
maxithron
09-01-2004, 21:39
Che compilatore stai usando?
Però stai usando cin solo per la get()...usalo anche per l'input...
uso Devcpp4
ho provato anche con cin e cout, ma è risulatato ancora peggio.
in pratica, immetto il carattere e il numero, e quando schiaccio INVIO, miappare solo il numero (senza i 2 cout, e il carattere) spostato un pò a destra.
ma a che serve mettere int davanti a main. Tanto, quest'ultimo non è mica un numero. Illuminatemi.
è solo una questione stilistica. In pratica tu potresti usare anche void main ma il compilatore ti direbbe che questa scrittura non è molto elegante. Invece è preferita la notazione con int main e return 0 (in pratica la funzione main da sempre in uscita il numero zero che è il codice di una funzione che è stata eseguita correttamente).
/\/\@®¢Ø
10-01-2004, 21:28
Originariamente inviato da xegros
ma a che serve mettere int davanti a main. Tanto, quest'ultimo non è mica un numero. Illuminatemi.
In realta' lo standard ora prevede che il main debba ritornare un intero (che e' poi il valore di ritorno dell'eseguibile), mentre una volta era facoltativo. Come caso particolare se non viene specificato un return viene ritornato 0, ma non ne sono sicuro, fai una prova.
xybercom
10-01-2004, 21:34
La notazione penso sia presa da Unix, se un programma viene eseguito senza errori dà il valore 0 alla shell, un valore diverso da 0 indica un errore.
il programma funziona (con g++ sotto linux) ma devi dichiarare numero come un int oppure cambiare il parametro di formato (d si riferisce a un intero). Così come l'hai scritto tu invece mi dà problemi.
In ogni caso stai mischiando funzioni di input di C e di C++ , il che non è sensato penso.
xybercom
10-01-2004, 21:42
La versione C++ "sistemata" (e a prova di warning :-) ) sarebbe :
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
char carattere;
int numero;
cout << "\ninserisci un carattere, e poi premi INVIO: ";
cout.flush();
cin >> carattere;
cout << "\ninserisci un numero: ";
cout.flush();
cin >> numero;
cout << "\nil carattere da te digitato e' : " << carattere;
cout << "\nil numero da te inserito e' : " << numero << endl;
return 0;
}
vi ringrazio delle risposte che mi avete saputo dare.
p.s. a cosa serve "endl" (end line)?
xybercom
11-01-2004, 18:47
endl =>
Originariamente inviato da /\/\@®¢Ø
L'output di cout è bufferizzato, se vuoi vedere il risultato devi chiamare una flush() sul canale o in alternativa, spedisci un endl che oltre a andare a capo fa il "flush" automaticamente.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.