PDA

Visualizza la versione completa : cin senza invio e senza bloccare il programma


Bellerofonte90
01-05-2008, 18:06
Devo fare un programma che deve visualizzare il tempo trascorso dall'avvio, una specie di cronometro. Ovviamente devo aggiornare secondo in continuazione la schermata, per questo faccio un system("cls"), però voglio far si che quando mi sono stufato di cronometrare spinga un tasto qualsiasi e automaticamente il programma finisce, se metto un cin>> questo mi blocca il rpogramma e quindi non si aggiorna più secondo per secondo, come posso fare?

Grazie :)

MacApp
01-05-2008, 18:31
Dipende dal Sistema Operativo su cui stai programmando.

Dark_Limit
01-05-2008, 18:31
metti un system("pause) e come istruzione successiva return 0 ..

oregon
01-05-2008, 18:36
Originariamente inviato da Dark_Limit
metti un system("pause) e come istruzione successiva return 0 ..

Ma cosa c'entra?

Bellerofonte90
01-05-2008, 18:50
lavoro su windows, vi mando il codice, è meglio. il programma è un pò diverso da come l'ho descritto.



#include <stdafx.h>
#include <ctime>
#include <iostream>
#include <cstdlib>
using namespace std;

void orologio (time_t &, int &, int &); // clock del programma

int main()
{
time_t tempo;
tempo=time(NULL); // presa del tempo iniziale
int minute=0; // minuti
int hour=7; // ore

struct utente //struttura di ogni utente
{
time_t arrivo; //il tempo di arrivo
int minuti; // il tempo che ci vuole a servire
utente * info; // parte informativa
};
utente* testa; // puntatore di testa
bool stato=0; //0 vuota ; 1 non vuota

cout<<hour<<":"<<minute;//visualizzazzione del primo orologio

do
{
orologio(tempo, minute, hour);
}while(hour!=10);
return 0;
}

void orologio (time_t & tempo, int & minute, int & hour)
{
time_t trascorso;
trascorso=time(NULL);
if(trascorso-tempo==60)
{
minute++;
tempo=time(NULL);
if(minute==60)
{
hour++;
}
system("cls");
cout<<hour<<":"<<minute;
}
}


Implementerò una cosa sulla memoria heap, è una simulazione di coda dal meccanico, si mette l'orario d'arrivo dell'utente, si mette in coda e si stima + o - quanto tempo ci vuole a riparare la macchina, l'orario di lavoro è alle 7 di mattina e il programma dovrebbe girare 10 ore nostop fino alle 17, ho già implementato il clock, detro il do-while dovrò mettere lo switch per tutte le utilità che ha questo programma però se mettessi nel menu di scelta un cin>> (che sarà l'intero che lo switch analizzerà) ovviamente il refresh dell'orologio che avviene ogni minuto si bloccherebbe nell'attesa dell'immissione.

Dark_Limit
01-05-2008, 18:51
Se non ho capito male devi usare la funzione GetAsyncKey() che legge un buffer da tastiera..(magari la metti in un ciclo)..dopo la chiave letta termini il programma con return 0(se sei in una funzione terminerebbe solo quella) in codesti casi usa return -1;

@oregon invece di obiettare la mia soluzione precedente che è apparentemente giusta solo che nn è legata al problema di richiesta potevi dare la soluzione..

Bellerofonte90
01-05-2008, 18:58
GetAsyncKey()

potete cortesemente spiegarmi come funziona e che parametri devo passargli, che tipo di libreria devo includere....

grazie :)
Mi siete stati davvero utilissimi.

Metflar
01-05-2008, 19:07
ma invece di usare system("cls") perché nn provi con cout<<"\r"<<hour<<":"<<minute; ?
:ciauz:

oregon
01-05-2008, 19:07
Anche se non e' standard puoi usare la kbhit

#include <conio.h>

int k;

k=kbhit();
if(k==0) ...

P.S. Dark ... ti ho solo chiesto a cosa servisse il suggerimento che hai dato ... potro' fare una obiezione se vedo che c'e' un qualcosa che non va? Se devo dare una soluzione o meno, poi, e' un altro affare ...

P.P.S. Non per obiettare ma per amore di verita' ... la GetAsyncKey non esiste ... semmai c'e' la GetAsyncKeyState che trovi documentata in

http://msdn.microsoft.com/en-us/library/ms646293(VS.85).aspx

P.P.P.S. Sempre per capire, sto ancora attendendo un chiarimento sulla questione dei puntatori ... ma se ritieni che sia troppo curioso, non rispondere ...

Bellerofonte90
01-05-2008, 19:25
questa funzione rileva se viene utilizzata la tastiera, però dove salva il valore digitato?

Loading