Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di Kilin
    Registrato dal
    Mar 2003
    Messaggi
    453

    [c++] equivalente del ciclo repeat

    ciao a tutti!

    ho iniziato i corsi di ingegneria informatica da qualche settimana, e mi sto cimentando col c++... :P

    vorrei sapere se in c++ c'è qualcosa di analogo a questa comune istruzione del pascal..

    codice:
    repeat
    ...
    blocco di istruzioni
    ...
    writeln("Vuoi fare un'altra prova?");
    readln(RISPOSTA);
    until (RISPOSTA = 'NO');
    spesso devo fare più prove per controllare un prog, e il fatto che ogni volta il programma si chiuda e debba ri-lanciarlo per fare altre prove è noioso!

    ho chiesto all'esercitatore e mi ha accennato che il repeat c'è pure sul c++, ma provando a scrivere "repeat" nel compilatore non lo metteva in neretto...si fa in qualche altro modo? o_O
    grazie mille!

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Studia qui

    http://www.cplusplus.com/doc/tutorial/control.html

    il ciclo while e il ciclo do-while

  3. #3
    Codice PHP:
    /*
    repeat
    ...
    blocco di istruzioni
    ...
    writeln("Vuoi fare un'altra prova?");
    readln(RISPOSTA);
    until (RISPOSTA = 'NO');
    */

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

    int main()
    {

        
    char risposta[20];

    // versione per c che usa stdio
        
    do {
            
    printf("Ciclo C : vuoi fare un'altra prova ? ");
            
    scanf("%s"risposta);
        } while (
    strcmp(risposta,"NO"));

    // versione per c++ che usa gli stream per input/output
        
    do {
            
    cout >> "Ciclo C++ : vuoi fare un'altra prova ? ";
            
    cin << risposta;
        } while (
    strcmp(risposta,"NO"));


    E' solo un pelino più complessa
    ciao
    sergio

  4. #4
    Utente di HTML.it L'avatar di Kilin
    Registrato dal
    Mar 2003
    Messaggi
    453
    grazie delle risposte! non ho ben chiaro cosa fa però questa istruzione:

    codice:
    strcmp(risposta,"NO")
    per il resto il do while mi sembra utile!

    comunque mi sembrava più veloce il metodo che ho letto sulla pagina di c++ linkata (grazie), usando loop...


    codice:
    saltaqui:
    ....
    bloccoistruzioni
    ....
    
    cout<<"altra prova?(S/N)";
    if (risposta == "S") go to saltaqui;
    qualche altra domandina veloce...

    1. perchè hai definito char risposta[20] e non ad esempio string risposta? che differenza c'è?
    2. perchè se definisco una variabile string frase; e gli do un valore tipo "ciao mamma" quando la vado a stampare mi scrive solo ciao, troncando tutto quel che c'è dopo lo spazio? una stringa è una stringa no, anche lo spazio è un carattere d'altronde.. dove sbaglio?

    grazie a tutti!

  5. #5
    perchè hai definito char risposta[20] e non ad esempio string risposta? che differenza c'è?
    Un programmatore C userebbe un array di char, un programmatore C++ la classe string. Stesso discorso per

    codice:
    strcmp(risposta,"NO")
    dove sbaglio?
    Mostra tutto il codice.

  6. #6
    int strcmp(char *, char *);

    strcmp() confronta le due stringhe e ritorna un intero >, < 0 = a zero a seconda se la prima stringa è <, > o = alla seconda.
    Qui si sfrutta il fatto che per il C un intero = 0 rappresenta il falso (per il C++ esiste invece il tipo bool).
    Quindi strcmp(risposta, "NO") è equivalente a strcmp(risposta, "NO") != 0 .
    Col C puoi scrivere codice molto efficiente e pulito a volte a discapito della chiarazze (per i non adetti al lavoro).
    Effettivamnete il C++ dispone di un tipo sring, e quindi è meglio in questo caso usarlo, ma ho utilizzato il vettore di caratteri per darti le due alternative (C e C++).
    Nella chiamata a strcmp il primo argomento è il vettore di caratteri, quando ad una funzione che accetta un puntatore a char viene passato il nome del vettore qusto viene automaticamente convertito nel puntatore al primo carattere del vettore.
    Un'ultima cosa il preferirei il ciclo do .... while risposta ... ad un salto condizionato. I salti condizionati si utilizzano solo quando hai più cicli annidati uno dentro l'altro.
    Per il discorso dell'errore che riscontri nella lettura della stringa è necessario, come ti ha detto pallinipinco, che posti un po' di codice.
    ciao
    sergio

  7. #7
    Utente di HTML.it L'avatar di Kilin
    Registrato dal
    Mar 2003
    Messaggi
    453
    ok.. ho fatto delle prove col salto condizionato e in effetti mi pare sia meglio evitare di usarlo, soprattutto ora che potrei farlo a sproposito...

    per l'altro problema, ecco quie:


    codice:
    #include<iostream>
    
    using namespace std;
    
    int main(){
        string nome;        // oppure char nome[20], il risultato è lo stesso
        cout<<"Come ti chiami, straniero?"<<endl;
        cin>>nome;
        
        cout<<"Ciao "<<nome<<", prenditi una birra!"<<endl;
    
        system ("pause");
        return 0;      
    }
    se scrivo "Pinco Pallino", quando vado a stampare "nome" mi da "Pinco" e basta.... sia che definisca nome come stringa, sia che lo definisca come array di caratteri... :berto:

  8. #8
    provala così

    Codice PHP:
    #include<iostream>

    using namespace std;

    int main(){

        
    string nome;        // oppure char nome[20], il risultato è lo stesso

        
    cout << "Come ti chiami, straniero?" << endl;

        
    getline(cinnome);
            
        
    cout<<"Ciao "<< nome.c_str() << ", prenditi una birra!" << endl;

        return 
    0;      

    ciao
    sergio

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.