Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [C++] Divinazione runica

    Il programma è funzionante, ma c'è un errore che non riesco a capire, io avvio il programma, si legge l'introduzione e dopo si aspetta 5 secondi per pensare alla domanda e poi si avvia l'estrazione delle rune ma nel runtime il programma si comparta in questo modo: si aspetta 5 secondi e poi scrive sia l'introduzione che l'estrazione tutto insieme. come posso fare, l'errore non lo vedo. Grazie

    codice:
    /*Programma che serve nella lancio e lettura delle tre Rune celtiche, antico metodo di divinazione degli antichi popoli nordici che tramite delle 
    pietre incise riuscivano a leggere ne futuro prossimo di una persona interpretando i segni degli dei del valhalla.
    
    Autore: Luca Pucillo, allievo Istituto Tecnico Industriale Alessando Volta di Guidonia (RM) 3°A Informatico.
    Inizio realizzazione 5 Maggio 2007 alle 10:50.*/
    
    #include <iostream.h>
    #include <time.h>
    #include <stdlib.h>
    
    unsigned int rune(void);//funzione che regola i numeri che vengono estratti in maniera pseudorandomica
    void divinazione (unsigned int);//funzione che serve per determinare le rune estratte e i loro significati
    
    int main ()
    {
    	unsigned int randomico1;
    	unsigned int randomico2;
    	unsigned int randomico3;
    	unsigned int tempo;
    	unsigned int tempo1;
    
    	cout<<"Lettura delle rune \n";
    	cout<<"Pensate ad una domanda intensamente \n";
    	cout<<"By Inquisitore_Fanatico90 \n \n";
    	srand (time (NULL));	
    	tempo=time(NULL)+5;
    	do
    	{
    		tempo1=time(NULL);
    		if(tempo==tempo1)
    		{
    			randomico1=rune();
    			randomico2=rune();
    			randomico3=rune();
    			divinazione(randomico1);
    			divinazione(randomico2);
    			divinazione(randomico3);
    			cout<<"Inquisitore_Fanatico90 vi ringrazia e vi prega di lasciare un obolo nel suo cappello per i servigi resi \n";
    			return 0;
    		}
    	}while(1);
    }
    
    unsigned int rune ()
    {
    	unsigned int randomic;
    
    	randomic=rand()%25+1;
    	return randomic;
    }
    
    void divinazione (unsigned int rando)
    {
    	switch (rando)
    	{
    	case 1:
    ........ (non scrivo i case perchè sono 25 e poi non servono, non ci sono errore di sintassi, questo ve lo posso assicurare)
    ALLA GUERRA!!!

  2. #2
    Prima del do inserisci
    codice:
    cout.flush();
    .
    Un paio di precisazioni:
    codice:
    #include <iostream.h>
    #include <time.h>
    #include <stdlib.h>
    qui stai includendo la versione obsoleta di iostream e le versioni C di time e stdlib. Sostituisci il codice in questione con questo:
    codice:
    #include <iostream>
    #include <ctime>
    #include <cstdlib>
    using namespace std;
    .
    Inoltre il metodo che usi per aspettare 5 secondi non è dei più ortodossi, sarebbe meglio mettere in pausa il thread... lavori su Windows o su Linux?
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Sono andato a controllare sul libro e non ho trovato nulla, è così vecchio che al posto di "cout" dice "printf" e fino ad oggi utilizzavo time.h, iostream.h grazie per la delucidazione. Con le vostre modifiche funziona tutto ma vorrei che me le spiegaste meglio
    ALLA GUERRA!!!

  4. #4
    Originariamente inviato da Bellerofonte90
    Sono andato a controllare sul libro e non ho trovato nulla, è così vecchio che al posto di "cout" dice "printf"
    Non è faccenda di libro vecchio, è che il tuo libro è di C e non di C++ (oppure stai guardando nella sezione del subset C di un libro di C++). In C si usa la printf (con l'header stdio.h), in C++ cout (con l'header iostream).
    e fino ad oggi utilizzavo time.h, iostream.h grazie per la delucidazione.
    Non c'è di che, ma anche qui, sarebbe stato più che corretto usare gli header che avevi inserito (ad eccezione ovviamente di iostream.h) in un programma C (non C++).
    Con le vostre modifiche funziona tutto ma vorrei che me le spiegaste meglio
    L'istruzione che ti ho suggerito effettua il flushing del buffer dello stream di output standard; in pratica quando invii dei dati ad uno stream (come, appunto, cout) esso non li scrive subito, ma aspetta di averne in una certa quantità (o che si verifichi una certa condizione) per poi scriverli tutti insieme. Ora, nel tuo programma prima del do non si verificava alcuna condizione per cui cout scrivesse effettivamente i dati che aveva nel buffer, per cui li scriveva insieme a quelli inseriti successivamente. Richiamando cout.flush() forzi il flushing (la scrittura) del buffer di cout così che i dati contenuti nel buffer vengano stampati prima dell'inizio del do.
    In ogni caso (sempre per mettere a posto quel ciclo di attesa, che è un pugno nello stomaco), su che sistema operativo stai lavorando?
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    su vista. cqm il libro si chiama teoria e programmazione in c e c++ ma la prof ci ha detto che quello che noi scriviamo è c++ non ci ha mai detto che è c ache perchè utilizziamo visual c++.
    ALLA GUERRA!!!

  6. #6
    Il C++ è un superset del C, per cui quasi tutti i programmi scritti in C possono essere compilato tranquillamente come C++; questo per dire che anche se usi VC++ puoi benissimo star programmando in C.
    Comunque, al posto del do in questione per inserire un ritardo inserisci dopo gli altri #include
    codice:
    #include <windows.h>
    e, al posto del do e dell'if in esso contenuto
    codice:
    Sleep(5000);
    randomico1=rune();
    randomico2=rune();
    randomico3=rune();
    divinazione(randomico1);
    divinazione(randomico2);
    divinazione(randomico3);
    cout<<"Inquisitore_Fanatico90 vi ringrazia e vi prega di lasciare un obolo nel suo cappello per i servigi resi \n";
    return 0;
    . Qualora dovesse darti errore su #include <windows.h> scaricati ed installati il Platform SDK dal sito della Microsoft.
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    esiste un manuale con tutte o le più utate librerie C++ con tutte le loro funzioni? Mi fareste un immenso piacere così potrei sbizzarrirmi. Grazie ancora
    ALLA GUERRA!!!

  8. #8
    Be', più che di funzioni in C++ si parla di classi... comunque trovi tutto online, ad esempio su siti come questo.
    Amaro C++, il gusto pieno dell'undefined behavior.

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.