|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Aug 2002
Messaggi: 3992
|
aiuto su codice c++
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; } |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Sep 2002
Città: vinci-spicchio
Messaggi: 530
|
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; }
__________________
Intel Pentium DualCore E2140 1,60 GHz , Asus P5LD2 R2.0,Sapphire x600xt 128Mb,hauppauge winTV,2x256Mb Ddr2 Vitesta 533Mhz,western digital caviar 160gb, seagate 20gb 5400giri, maxtor 40gb 7200giri, dvd+-rw gigabyte(BTC) 4x,Samsung writemaster dvd duallayer 18x , edimax wireless<-->router D-link G604T. |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
clrscr e getch non sono funzioni standard, attenzione a prendere brutte abitudini con i compialtori Borland
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Sep 2002
Città: vinci-spicchio
Messaggi: 530
|
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.
__________________
Intel Pentium DualCore E2140 1,60 GHz , Asus P5LD2 R2.0,Sapphire x600xt 128Mb,hauppauge winTV,2x256Mb Ddr2 Vitesta 533Mhz,western digital caviar 160gb, seagate 20gb 5400giri, maxtor 40gb 7200giri, dvd+-rw gigabyte(BTC) 4x,Samsung writemaster dvd duallayer 18x , edimax wireless<-->router D-link G604T. |
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
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 Ultima modifica di cionci : 15-02-2004 alle 11:22. |
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Dec 2000
Città: dintorni di Seregno (MI)
Messaggi: 312
|
0) Ho un po' sistemato il programma per evitare warnings:
Codice:
#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;
}
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
__________________
powered by GNU/Linux [ Debian Sid ] Ultima modifica di xybercom : 15-02-2004 alle 17:42. |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Aug 2002
Messaggi: 3992
|
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 |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Dec 2000
Città: dintorni di Seregno (MI)
Messaggi: 312
|
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
__________________
powered by GNU/Linux [ Debian Sid ] |
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Aug 2002
Messaggi: 3992
|
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 |
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Dec 2000
Città: dintorni di Seregno (MI)
Messaggi: 312
|
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.
__________________
powered by GNU/Linux [ Debian Sid ] Ultima modifica di xybercom : 17-02-2004 alle 21:31. |
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Sep 2002
Città: vinci-spicchio
Messaggi: 530
|
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');
__________________
Intel Pentium DualCore E2140 1,60 GHz , Asus P5LD2 R2.0,Sapphire x600xt 128Mb,hauppauge winTV,2x256Mb Ddr2 Vitesta 533Mhz,western digital caviar 160gb, seagate 20gb 5400giri, maxtor 40gb 7200giri, dvd+-rw gigabyte(BTC) 4x,Samsung writemaster dvd duallayer 18x , edimax wireless<-->router D-link G604T. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 07:13.



















