PDA

View Full Version : aiuto su codice c++


lucas72
13-02-2004, 21:31
Ciao
questo codice sotto in c++ non fa altro che
contare i caratteri di una frase.
Dato che è da pochi giorni che mi sono
dedicato a questo linguaggio (e alla programmazione in genere)
vorrei, per piacere, un paio di consigli su:
1) come e cosa devo cambiare e/o aggiungere al codice
per far visualizzare progressivamente il conteggio dei caratteri inseriti di una frase
(cioè: scrivo "c" e un contatore situato magari più sotto o a lato
mi riporta 1; scrivo "a" e il contatore riporta 2 e cosi via (compresi eventuali spazi). Se è possibile
vorrei aggiungere una scritta (e un beep sonoro) che mi avverta quando il numero
dei caratteri ha raggiunto un TOT da me stabilito

2) il codice sotto una volta compilato con il dev c++ si avvia in una console di windows.
Come si fa, invece a creare una finestra windows?
Infine, se non chiedo troppo, potete suggerirmi siti per esercizi e tutorial semplici
sul c++. Ecco il codice:


#include <iostream.h>
main()
{
//inizializzazioni
const char TAPPO='$';
char ch;
int totCaratteri;

cin.unsetf(ios::skipws);

totCaratteri=0;


cout<< endl <<"Introdurre un testo terminato da "<<TAPPO << endl;

// leggi carattere corrente
cin>>ch;

//while (il testo non è finito)
while (ch!=TAPPO)
{
//numero totale di caratteri ++
totCaratteri++;

// leggi carattere corrente
cin>>ch;

}
//if (numero totale di caratteri >0)
if (totCaratteri>0)
{
//stampa i risultati
cout << "il totale dei caratteri: ";
cout << totCaratteri <<endl;
}
else
{
//stampa "Non sono stati introdotti caratteri"
cout <<endl<<"Non sono stati inseriti caratteri"<<endl;
}
system("PAUSE");
return 0;
}

alderighi
14-02-2004, 18:42
Ecco come farei io:
do
{
clrscr();
ch=getch;
if(ch!=tappo)
totCaratteri++;
if(ch=='S'||totcaratteri==5)//esempio di condizione
cout<<"\a";//bip dell'altoparlante
cout<<"Numero caratteri: "<<totcaratteri;
}
while(ch!=TAPPO);
system("PAUSE");
return 0;
}

cionci
14-02-2004, 19:02
clrscr e getch non sono funzioni standard, attenzione a prendere brutte abitudini con i compialtori Borland ;)

alderighi
15-02-2004, 11:05
si è vero, si prendono delle bruttissime abitudini però mi sembra che quelle due istruzioni funzionino anche sul devc++, inoltre devo dire che il borland è pieno di bug piccoli e grossi quanto una casa anche se è molto semplice.

cionci
15-02-2004, 11:17
Originariamente inviato da alderighi
si è vero, si prendono delle bruttissime abitudini però mi sembra che quelle due istruzioni funzionino anche sul devc++
Solo getch...ma se vai su Linux o su qualsiasi altro SO diverso da Windows non funziona...

Non è che ti volevo riprendere, ma credo che sia bene metterlo bene in chiaro...sempre meglio non usarle...
Te lo dico perchè anche io ero abituati ad usarle una decina di anni fa ;)

xybercom
15-02-2004, 17:34
0) Ho un po' sistemato il programma per evitare warnings:

#include <iostream>

using namespace std;

const char TAPPO='$';

int main()
{
cout<< "\nIntrodurre un testo terminato da "<<TAPPO << endl;
cin.unsetf( ios::skipws );
char ch=' ';
unsigned int totCaratteri=0;
//while (il testo non è finito)

while ( ch != TAPPO )
{
// leggi carattere corrente
cin>>ch;

//numero totale di caratteri ++
totCaratteri++;
//cout << totCaratteri;
}

//if (numero totale di caratteri >0)
if ( totCaratteri ) // totCaratteri > 0
{
//stampa i risultati
cout << "\nil totale dei caratteri : " << totCaratteri << endl;
}
else
{
//stampa "Non sono stati introdotti caratteri"
cout << "\nNon sono stati inseriti caratteri"<< endl;
}

//system("PAUSE"); // win only

return 0;
}

1a) i caratteri vengono letti tutti assieme quando si preme enter e non una alla volta (basta togliere il commento alla riga 22 per verificare); forse questo si può evitare con il borland, ma non è certo una bella soluzione...
Il problema (penso) nasca dal fatto che la console passa i caratteri al programma solo quando l'utente ha premuto enter.
Un programma che fa quello che vuoi tu sotto Linux c'è, è showkey di Eric Raymond, usa la libreria termios che non so se è disponibile con Dev.
1b) la else ... con Non sono stati inseriti caratteri non viene mai eseguita, facile da sistemare comunque
3) fare questo in una finestra win non è così semplice, dovresti usare una libreria di widgets come wxWindows o Fltk (o al limite le MFC che ti sconsiglio), guarda nei post in rilievo

lucas72
16-02-2004, 18:37
ehi grazie!
provo e vi faccio sapere
ciao

gia che ci sono ne approfitto per chiedervi dove posso trovare
tutorial su c++ (in Italiano) e soprattutto sugli array.
(per me che sono all'inizio sono un pò ostici da capire e usare).
Ho provato a cercare qualcosa con google ma niente di
soddisfacente.
Grazie ancora

xybercom
16-02-2004, 21:32
x il C++ di base: http://www.cplusplus.com e in particolare http://www.cplusplus.com/doc/#tutorial
in italiano forse trovi qualcosa su programmazione.it, altrimenti ti segnalo un link interessante http://www.lulli.net/WEB/hack/xximparare-c/ che però riguarda il C

lucas72
17-02-2004, 18:59
a proposito del codice sopra
uso l'istruzione "pause" altrimenti la consolle di windows
scompare subito dopo aver dato esegui o cliccato
sul file exe prodotto dal compilatore.
(in merito al codice proposto da
xybercom messaggi di errore non ne ricevo comunque-forse ho capito male! )
un altro problema è che non so come ripetere
tutto il programma.
mi spiego:
una volta portato a termine il compito e dato invio la consolle sparisce e mi ritocca
riavviare il file per far eseguire il conteggio di un'altra frase. Come posso evitare questo fastidio e chiudere il programma solo
su mia istruzione?
grazie ancora

xybercom
17-02-2004, 21:28
Usare la forma #include <header.h> è un modo "deprecato", di solito i compilatori te lo segnalano.
Fai partire il programma da una shell del dos (prompt dei comandi) ed eviti tutti i problemi che hai descritto.

alderighi
20-02-2004, 14:30
Se voui fare una cosa un po' seria crei un case switch con un menù, altrimenti alla fine del conteggio chiedi all'utente di premere un tasto (per esempio 0) per uscire e qualsiasi altro per andare avanti, mettendo la condizione di ripetizione dentro un do-while.
Es
do
{
istruzioni varie
char exit;
cout<<"Per uscire digita s o S, per andare avanti un altro tasto qualunque";
cin>>exit;
}
while(exit!='s'&&exit!='S');