Pagina 1 di 4 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 35
  1. #1

    c++ impazzito

    ragazzi ho un problemino:

    codice:
    #include <iostream>
    using std::cout;
    using std::cin;
    using std::endl;
    
    #include <cstdlib>
    using std::rand;
    using std::srand;
    
    #include <ctime>
    using std::time;
    
    
    #include "educational.h"
    
    educational::educational(){
    	srand( time ( 0 ) );
    	int n1 = 1 + rand() % 9;
    	int n2 = 1 + rand() % 9;
    	int input = getMessage(n1, n2);
    	int multiplex = n1*n2;
    	while (!verifica(input, multiplex)){
    		input=getError();
    	}
    	cout<<input;
    	cout<<"Complimenti, la tua risposta e' esatta!"<<endl;
    }
    int educational::getMessage(int n1, int n2){
    	int num;
    	cout<<"Quanto fa "<<n1<<" per "<<n2<<"?"<<endl;
    	cin>>num;
    	return num;
    }
    bool educational::verifica(int input, int multiplex){
    	return (input == multiplex);
    }
    int educational::getError(){
    	cout<<"Hai sbagliato, prova ancora:"<<endl;
    	int input;
    	cin>>input;
    	return input;
    }
    eseguendo questo codice da un main succede funziona e tutto ok, ma se per caso, invece di inserire un numero, inserisco un carattere letterale, mi entra in un ciclo infinito stampando

    Hai sbagliato, prova ancora:
    Hai sbagliato, prova ancora:
    Hai sbagliato, prova ancora:
    Hai sbagliato, prova ancora:
    Hai sbagliato, prova ancora:
    Hai sbagliato, prova ancora:

    e così via fino all'infinito cosa diamine succede??

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304

    Moderazione

    Complimenti per il titolo.
    Siccome deve essere esplicativo del tema trattato, lo modifico.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Scrivi

    cin.clear();
    cin.ignore(100, '\n');
    cin>>input;

    quando fai l'input

    P.S. Ma perche' tutto il programma nel costruttore della classe?

  4. #4
    Originariamente inviato da oregon
    Scrivi

    cin.clear();
    cin.ignore(100, '\n');
    cin>>input;

    quando fai l'input

    P.S. Ma perche' tutto il programma nel costruttore della classe?
    a cosa servono le funzioni di cin che mi hai consigliato?
    il programma sta nel costruttore perchè stavo facendo alcune prove

    e anche perchè parte tutto in automatico solo creando l'oggetto

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Se darai un'occhiata all'oggetto cin (e a tutti i relativi metodi e proprieta' ...) scoprirai che esiste una gestione dell'errato input (caratteri non corretti rispetto al tipo di dato usato) e viene gestito tramite la clear e la ignore

  6. #6
    si ok ma non capisco come questo possa farmi fare un ciclo infinito...capisco se mi dava errore..ma un ciclo infinito..

  7. #7
    e poi cin.ignore(100, "\n");
    l'n è il ritorno a capo ma il 100?
    e poi dato che ci sei dove posso trovare la documentazione della classe cin e in generale di tutte le classi?

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Il ciclo infinito e' determinato dal fatto che l'oggetto cin conserva uno stato dell'input.

    Se lo stato e'

    fail

    perche' e' avvenuto un errore nel precedente input e questo stato non viene "cancellato", la cin non viene eseguita e non viene fatto un nuovo input. In questa situazione, il tuo metodo restituira' un valore non corretto e il controllo fallira' nuovamente ... e cosi' via ...

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Originariamente inviato da the darkness
    ... dove posso trovare la documentazione della classe cin e in generale di tutte le classi?
    La cin, la cout e la cerr fanno parte delle librerie standard del C++.

    Non e' molto consigliabile programmare in C++ senza conoscere almeno questi oggetti.
    La cosa corretta sarebbe studiarne le caratteristiche in un libro (tutti i libri di C++, anche di base, parlano di queste classi ...)

    Su internet, se usi google, trovi informazioni a tonnellate ... sarebbe inutile fare la ricerca per te ... in ogni caso, ad esempio

    http://www.cplusplus.com/reference/

  10. #10
    a me ste cose fanno innervosire sai perchè? io sto imparando il c++ da 2 guide dell'apogeo di deitel deitel e dice solo che cin fa l'input di dati ma dell cin.ignore e .clear non ne parla assolutamente spero lo faccia più avanti...
    cmq il 100 che stava nel .ignore a cosa serve?

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.