PDA

View Full Version : Stesso risultato, diversa sintassi: "Hello world" in C++


Everyman
02-04-2007, 06:37
Salve a tutti ragazzi :)

Premetto che uso il dev-C++ 4.9.9.2


Ecco la prima versione


/* Test per la corretta installazione del compilatore*/

#include <stdio.h>
#include <stdlib.h>
int main()
{
printf( "Hello, world! \n");
system ("pause");
return 0;
}


Ecco la seconda versione

// my first program in C++

#include <iostream>
using namespace std;

int main ()
{
cout << "Hello World! \n";
system ("pause");
return 0;
}



Dopo un anno che uso Python, credo sia arrivato il momento di passare a linguaggi di programmazione piu' "veloci" nell'eseguire.
Siccome sono niubbetto in C++, mi potreste dire quale dei due metodi sopracitati vi garba di piu' e perche'?

Che differenza c'e' tra printf e cout?
Che differenza c'e' tra " " e <<< ?

Inoltre ho scoperto solo ora che senza system ("pause"); non posso vedere cio' che ottengo dopo aver compilato...o meglio, vedo il risultato per un millesimo di secondo e poi scompare. Non c'e' un modo per mettere questo system ("pause"); di defaut senza scriverlo ogni volta?

Un grazie in anticipo a chi mi risponde :D

Ciauz!

Tyrael Reloaded
02-04-2007, 07:07
Ciao premetto che nemmeno io sono un guru di C++, anzi io di solito in facoltà programmo in C. E se non erro la prima versione è proprio in C, con la printf, mentre la seconda è in C++. System pause credo sarai costretto a metterlo ogni volta (sotto Windows, sotto Linux non serve credo).
Qualcuno ha da aggiungere qualcosa??? Magari da correggermi???

Everyman
02-04-2007, 07:29
Ciao premetto che nemmeno io sono un guru di C++, anzi io di solito in facoltà programmo in C. E se non erro la prima versione è proprio in C, con la printf, mentre la seconda è in C++. System pause credo sarai costretto a metterlo ogni volta (sotto Windows, sotto Linux non serve credo).
Qualcuno ha da aggiungere qualcosa??? Magari da correggermi???

Ciao! :)

Entrambi i programmi girano su Dev-C++
Quindi entrambe le versioni dovrebbero essere per C++


Grazie per il consiglio sul system pause...anch'io sospettavo che dipendesse dal sistema operativo. Appena posso faccio una prova su Unix/Linux

:)

andbin
02-04-2007, 08:22
Siccome sono niubbetto in C++, mi potreste dire quale dei due metodi sopracitati vi garba di piu' e perche'?Nessuna delle due versioni è "migliore" dell'altra. Semplicemente nella prima versione hai usato le funzionalità di I/O del "C", nella seconda versione hai usato le funzionalità di I/O del C++. Tra l'altro nel secondo avresti dovuto mettere #include <cstdlib>

Inoltre ho scoperto solo ora che senza system ("pause"); non posso vedere cio' che ottengo dopo aver compilato...o meglio, vedo il risultato per un millesimo di secondo e poi scompare. Non c'e' un modo per mettere questo system ("pause"); di defaut senza scriverlo ogni volta?Non so quante volte l'ho già detto e ripetuto: leggi <questo> (http://www.hwupgrade.it/forum/showthread.php?t=1323690) thread e in particolare il mio post #7.

Everyman
02-04-2007, 09:01
Nessuna delle due versioni è "migliore" dell'altra. Semplicemente nella prima versione hai usato le funzionalità di I/O del "C", nella seconda versione hai usato le funzionalità di I/O del C++. Tra l'altro nel secondo avresti dovuto mettere #include <cstdlib>

Non so quante volte l'ho già detto e ripetuto: leggi <questo> (http://www.hwupgrade.it/forum/showthread.php?t=1323690) thread e in particolare il mio post #7.

Si, ho letto...pero' non ti arrabbiare :cry:

Tra l'altro nel secondo avresti dovuto mettere #include <cstdlib>


A me pero' funziona lo stesso. Perche' dovrei aggiungerlo? :confused:

andbin
02-04-2007, 09:08
Si, ho letto...pero' non ti arrabbiare :cry: No no, nessun problema, figurati .... è che tale questione salta fuori con una certa frequenza! :rolleyes:

A me pero' funziona lo stesso. Perche' dovrei aggiungerlo? :confused:Leggi <questo> (http://www.hwupgrade.it/forum/showthread.php?t=1440620) thread, post #4.

Everyman
02-04-2007, 09:16
No no, nessun problema, figurati .... è che tale questione salta fuori con una certa frequenza! :rolleyes:

Leggi <questo> (http://www.hwupgrade.it/forum/showthread.php?t=1440620) thread, post #4.

Grazie, gentilissimo :)

Sempre se puoi/vuoi, puoi rispondermi a queste due domande:

1) Perche' quando vado su file-new esiste l'opzione "project" e "source file"? Mi spiego: io uso sempre source file per fare i miei programmi, per quale motivo dovrei avere un nuovo progetto?

2) mi hai citato #include <cstdlib>...mi puoi dare un link di un elenco completo di tutti i richiami alle librerie, magari con tanto di spiegazione?

3) Che differenza c'e' tra printf e cout? Che differenza c'e' tra " " e <<< ? Riguarda il fatto e' che uno e' nato su , mentre l'altro e' nato su C++?

Grazie ancora :)

andbin
02-04-2007, 09:40
1) Perche' quando vado su file-new esiste l'opzione "project" e "source file"? Mi spiego: io uso sempre source file per fare i miei programmi, per quale motivo dovrei avere un nuovo progetto?Con il Dev-C++ mi sembra di ricordare che infatti si può compilare anche senza creare un progetto. Con altri ambienti di sviluppo (es. Visual C++) no. Devi creare un progetto apposito.
Creare un progetto serve per poter specificare opzioni specifiche di compilazione/link, raggruppare più sorgenti/header, ecc...

2) mi hai citato #include <cstdlib>...mi puoi dare un link di un elenco completo di tutti i richiami alle librerie, magari con tanto di spiegazione?Informazioni sulle librerie e include "standard" le trovi un po' dappertutto (a tonnellate se cerchi). Solo alcuni link: http://cppreference.com http://www.cplusplus.com


3) Che differenza c'e' tra printf e cout? Che differenza c'e' tra " " e <<< ? Riguarda il fatto e' che uno e' nato su , mentre l'altro e' nato su C++?printf è una funzione della libreria standard del "C" mentre cout è un oggetto di classe ostream che fa parte della libreria standard del C++.
Riguardo a " " e <<< (tra l'altro è << non <<< che non esiste) non c'è una relazione ... " " è per le stringhe, << è un operatore (di shift) di cui è stato fatto un "overload" (vedi appunto la classe ostream) per poter essere usato per inviare dati sullo stream.

Comunque, ripeto: sono funzionalità di I/O diverse che appartengono a librerie diverse.

Everyman
02-04-2007, 09:46
Con il Dev-C++ mi sembra di ricordare che infatti si può compilare anche senza creare un progetto. Con altri ambienti di sviluppo (es. Visual C++) no. Devi creare un progetto apposito.
Creare un progetto serve per poter specificare opzioni specifiche di compilazione/link, raggruppare più sorgenti/header, ecc...

Informazioni sulle librerie e include "standard" le trovi un po' dappertutto (a tonnellate se cerchi). Solo alcuni link: http://cppreference.com http://www.cplusplus.com


printf è una funzione della libreria standard del "C" mentre cout è un oggetto di classe ostream che fa parte della libreria standard del C++.
Riguardo a " " e <<< (tra l'altro è << non <<< che non esiste) non c'è una relazione ... " " è per le stringhe, << è un operatore (di shift) di cui è stato fatto un "overload" (vedi appunto la classe ostream) per poter essere usato per inviare dati sullo stream.

Comunque, ripeto: sono funzionalità di I/O diverse che appartengono a librerie diverse.

Grazie.

Davvero gentilissimo :)

Everyman
02-04-2007, 12:01
andbin scusami ancora, ho fatto il mio primo programmino ed ce l'ho (quasi) fatta.

Voglio semplicemente mettere come input un carattere e un numero intero.
Ho scritto questo codice:


#include <stdio.h>
#include <iostream>

main()
{
char carattere;
char num;

printf("Inserire un carattere a scelta e premere INVIO: ");
scanf("%c",& carattere);
printf("Inserire un intero compreso tra 0 e 127: ");
scanf("%d",& num);
printf("Il carattere inserito e': %c",carattere);
printf("Il numero inserito e': %d",num);
printf("\n");
system ("pause");
return(0);
}



Sembra tutto a posto...ma come risultato mi scrive il numero ma non il carattere

in pratica si vede:

Inserire un carattere a scelta e premere INVIO: a
Inserire un intero compreso tra 1 e 127 e premere INVIO: 10
Il carattere inserito e' il numero inserito e' 10

Come vedi, c'e' uno spazio vuoto e non mi scrive il carattere.
Dove sbaglio? :confused:

andbin
02-04-2007, 12:23
#include <iostream>Innanzitutto <iostream> non ti serve visto che hai usato solamente funzioni della libreria standard del "C".

char num;

scanf("%d",& num);Se usi lo specificatore di formato %d, la variabile deve essere un int, non un char. Avendola messa come char, sicuramente la scanf va a sovrascrivere qualcosa (la variabile carattere).

dasdsasderterowaa
02-04-2007, 12:58
Salve a tutti ragazzi :)

Premetto che uso il dev-C++ 4.9.9.2


Ecco la prima versione


/* Test per la corretta installazione del compilatore*/

#include <stdio.h>
#include <stdlib.h>
int main()
{
printf( "Hello, world! \n");
system ("pause");
return 0;
}


Ecco la seconda versione

// my first program in C++

#include <iostream>
using namespace std;

int main ()
{
cout << "Hello World! \n";
system ("pause");
return 0;
}



Dopo un anno che uso Python, credo sia arrivato il momento di passare a linguaggi di programmazione piu' "veloci" nell'eseguire.
Siccome sono niubbetto in C++, mi potreste dire quale dei due metodi sopracitati vi garba di piu' e perche'?

Che differenza c'e' tra printf e cout?
Che differenza c'e' tra " " e <<< ?

Inoltre ho scoperto solo ora che senza system ("pause"); non posso vedere cio' che ottengo dopo aver compilato...o meglio, vedo il risultato per un millesimo di secondo e poi scompare. Non c'e' un modo per mettere questo system ("pause"); di defaut senza scriverlo ogni volta?

Un grazie in anticipo a chi mi risponde :D

Ciauz!

perché non provi il C#? è un buon linguaggio, più semplice di C++....
lo sto studiando in queste settimane e non sto trovando grosse difficoltà (provengo da Visualbasic e Gambas) :)

se installi il .NET Framework 2.0 SDK e SharpDevelop, puoi anche realizzare applicazioni per PocketPC... ;)


Tschüss

Everyman
02-04-2007, 16:37
Se usi lo specificatore di formato %d, la variabile deve essere un int, non un char. Avendola messa come char, sicuramente la scanf va a sovrascrivere qualcosa (la variabile carattere).

Grazie per il consiglio :) Ho risolto e ora funziona!

Innanzitutto <iostream> non ti serve visto che hai usato solamente funzioni della libreria standard del "C".

Ho provato a togliere <iostream> ma il compilatore mi segnala un errore e precisamente su questa linea di codice:
system ("pause");

Se invece rimetto <iostream> il tutto funziona :)

Everyman
02-04-2007, 16:43
ma un sito che differenzia le librerie tra c# e c++ non c'e'?

Al momento confondo spesso le due cose...

Everyman
02-04-2007, 16:45
perché non provi il C#? è un buon linguaggio, più semplice di C++....
lo sto studiando in queste settimane e non sto trovando grosse difficoltà (provengo da Visualbasic e Gambas) :)

se installi il .NET Framework 2.0 SDK e SharpDevelop, puoi anche realizzare applicazioni per PocketPC... ;)


Tschüss

prima o poi provero' anche il C# :D

Ma ora sono intrippato nel conoscere il c++, dopo oltre un anno che smanetto con python.
Cose come array, funzioni, classi, ciclo while, do-while, for etc mi sono abbastanza familiari dunque.

Devo solo fare un po' di pratica con le librerie (capire bene cosa appartiene al c# e cosa appartiene al c++) e capire cosa mettere all'inizio tipo

#include <stdio.h>
#include <stdlib.h>
#include <iostream>

e cose del genere e avere un po' piu' di confidenza nella sintassi generale che, devo ammetterlo, su python e' decisamente piu' semplice (peccato che il pitone sia cosi' lento nell'eseguire i programmi :cry: )

Grazie ancora per i consigli che mi avete dato ragazzi :)

Ora torno a giocare con la mia PS3 nuova di zecca :D

RaouL_BennetH
02-04-2007, 17:07
ma un sito che differenzia le librerie tra c# e c++ non c'e'?

Al momento confondo spesso le due cose...

Più che altro magari puoi tendere a confondere C con C++.

Le librerie ed il modo di includerle in C# e C++ sono completamente diverse (e comunque le differenze fra i due linguaggi sono notevoli anche se come sintassi si somigliano tantissimo)

Per es.:



//C
#include <stdio.h>


//C++
#include <iostream>

//C#

using System.NomeLibreria

andbin
02-04-2007, 17:08
system ("pause");[/B]

Se invece rimetto <iostream> il tutto funziona :)Perché sicuramente l'header iostream include (sicuramente tramite altri include) a sua volta cstdlib, che a sua volta include stdlib.h (dove finalmente è dichiarata la system() ).

#include <stdio.h>
#include <stdlib.h>
#include <iostream>Cerca di comprendere ciò che è del C e ciò che è del C++. stdio.h/stdlib.h sono del "C", iostream è del C++. In genere è buona cosa non confondere/mischiare le cose, specialmente se sei all'inizio.

Se usi il "C" allora includi pure stdio.h e fai printf(...blabla...), altrimenti se usi il C++, includi iostream, metti using namespace std; e quindi usa cout<<...blabla...

dasdsasderterowaa
02-04-2007, 19:01
peccato che il pitone sia cosi' lento nell'eseguire i programmi :cry:

si, è vero... è lentuccio... ma esiste Psyco, l'hai mai provato?
http://psyco.sourceforge.net/

http://psyco.sourceforge.net/introduction.html



Tschüss

Everyman
03-04-2007, 06:24
Perché sicuramente l'header iostream include (sicuramente tramite altri include) a sua volta cstdlib, che a sua volta include stdlib.h (dove finalmente è dichiarata la system() ).



Azz...c'hai ragione!

Ho messo solo:
#include <iostream>

e ho tolto:
#include <stdio.h>

E il tutto funziona :eek:

D'ora in poi ti chiamero' MAESTRO :ave:

Everyman
03-04-2007, 06:25
Cerca di comprendere ciò che è del C e ciò che è del C++. stdio.h/stdlib.h sono del "C", iostream è del C++. In genere è buona cosa non confondere/mischiare le cose, specialmente se sei all'inizio.

Se usi il "C" allora includi pure stdio.h e fai printf(...blabla...), altrimenti se usi il C++, includi iostream, metti using namespace std; e quindi usa cout<<...blabla...

Scusa la mia niubbiaggine, ma credevo che i comandi del "C" non si potessero usare quando si programma in C++...invece e' vero l'opposto. Da qua nasce la mia confusione.

Provvedero' a studiarmi per bene cosa appartiene al C, cosa appartiene al C# e cosa appartiene al C++ allora :)

Everyman
03-04-2007, 07:26
Comunque, credo che una forma piu' elegante e corretta per ottenere "Hello World" per C++ sia:




// Come dire HELLO WORLD with C++

#include <iostream>

using namespace std;


int main()
{

cout << "Hello world! I've "

<< 8 << " years today...\n" << endl; //La speciale funzione iostream endl visualizza la linea ed un fine linea
system ("pause");
}







SARA' difficile, sara' complicato, ma C++ come linguaggio mi intrippa parecchio.
Si possono fare su un sacco di cose, potenzialmente, ad alta velocita' di esecuzione. Ora provo a fare un po' di language parsing (che con python era abbastanza lento, ma che con C++ scommetto sara' MOLTO piu' veloce).

Per language parsing intendo una cosa legata alla linguistica computazionale. Non so se avete presente TnT (trigram and tag)...spero per voi che la risposta sia no :asd: perche' c'e' un lavoro dietro mica indifferente imho. Es: c'e' un testo lungo, che so, 100.000 parole e il parser deve individuare cosa sia il soggetto, cosa sia il verbo, cosa sia il complemento oggetto ecc ecc, anche in fase di disambiguation (es: "live" e' verbo o aggettivo? Dipende dal contesto e bla-bla-bla...:D ).
Dopodiche si fa una comparazione con la versione goldstandard (corretta al 100%, controllata "a mano" da occhi umani), dato che il parser fa inevitabilmente degli errori. Attualmente ho raggiunto circa il 90% di tag corretto, ma il sistema si puo' sempre raffinare (in inglese si fa un po' di "discounting" o "pruning"...dato che vivo in UK qui usano questa terminologia, in Italia non so :D)

Di tanto in tanto, cerco di aggiornare questo topic con qualche piccola domandina, sperando che voi mi possiate aiutare.

Soprattutto il MAESTRO :ave: