View Full Version : [C] Pausa - system("PAUSE")
salvodel
15-07-2008, 17:02
Salve a tutti, volevo chiedervi un modo semplice per far fermare il programma e leggere a schermo i risultati. Sotto windows utilizzo system("PAUSE") ma non è standard e sotto Linux non va. A questo punto mi ero creato la funzione pausa:
void pausa(void)
{
printf("\nPAUSE\nPremere INVIO....");
getchar();
}
quando la richiamo nel main vedo la printf ma non si ferma a getchar. Dov'è l'errore :confused: ?
Grazie a tutti.
wingman87
15-07-2008, 18:08
Forse il buffer di input non è vuoto, quindi getchar prende il suo char e l'esecuzione va avanti
salvodel
15-07-2008, 19:06
Forse il buffer di input non è vuoto, quindi getchar prende il suo char e l'esecuzione va avanti
Mi potresti dire come lo risolvo?
grazie
Big Bamboo
15-07-2008, 19:13
Mi potresti dire come lo risolvo?
grazie
while(1)
getchar();
e poi fermi il programma con un ctrl+c
due getchar are the way :p
oppure molto + semplicemente
system("read");
:)
oppure molto + semplicemente
system("read");
:)
se system("pause") non è standard immagino che nemmeno system("read") lo sia..
ho appena provato per sicurezza su ubuntu e funziona
scrivi read da shell e il controllo attenderà che premi un tasto
come normale che sia
analogamente se vuoi fare una lettura ritardata c'e' sempre
system("sleep x"); con x= secondi di delay
potresti mettere system("sleep 5");
per sospendere l'esecuzione per 5 sec e avere il tempo di leggere
cmq la read per unix è l'alternativa a pause di dos
salvodel
16-07-2008, 09:12
Pensavo che la cosa fosse piu semplice ed invece no.
1) Il ciclo while non mi convince l'uscita con ctrl+c.
2) Il doppio getchar va bene la prima volta ma se il buffer è vuoto la seconda volta devo dare due enter.
3) system("read") mi costringe ad usare system("PAUSE") per rendere il programma identico anche sotto Windows.
Se svuotassi il buffer prima di dare getchar? Non so come si fa.
Cmq ho provato gets e funziona ma quando compilo mi da il seguente warning:
In function `pausa':
main.c:(.text+0x2a): warning: the `gets' function is dangerous and should not be used.
Inquietante :mbe:
Energy++
16-07-2008, 09:33
void pausa(void)
{
printf("\nPAUSE\nPremere INVIO....");
fflush(stdin);
getchar();
}
provato a svuotare il buffer della tastiera? :stordita:
salvodel
16-07-2008, 09:54
void pausa(void)
{
printf("\nPAUSE\nPremere INVIO....");
fflush(stdin);
getchar();
}
provato a svuotare il buffer della tastiera? :stordita:
Niente. Piallata in pieno la funzione pausa(); :muro: Vedo solo la printf e non si ferma.
Cito: (http://forum.html.it/forum/showthread/t-996680.html) "il comportamento di fflush sugli stream di input non è definito. fflush è fatta per operare sugli stream di output." Almeno non sono il solo :D
Energy++
16-07-2008, 10:09
Niente. Piallata in pieno la funzione pausa(); :muro: Vedo solo la printf e non si ferma.
Cito: (http://forum.html.it/forum/showthread/t-996680.html) "il comportamento di fflush sugli stream di input non è definito. fflush è fatta per operare sugli stream di output." Almeno non sono il solo :D
si è vero però a me una volta aveva funzionato :D
ma tu vuoi creare un prg sia per linux che per win retrocompatibile ?
salvodel
16-07-2008, 13:40
ma tu vuoi creare un prg sia per linux che per win retrocompatibile ?
Che intendi per retrocompatibile? Io sto scrivendo un programma in C e per quanto ne so io se rispetto lo standard non importa il sistema operativo.
Per adesso mi sa che l'unica soluzione è l'utilizzo di direttive. Ho trovato questa soluzione ma per adesso l'ho provata una mezza volta e mi ha dato un po di problemi. Dove la devo mettere?
#ifdef _WIN
const char* pulisci = "cls";
#elseif
#ifdef LINUX
const char* pulisci = "clear";
#else
#error "OS NOT SUPPORTED"
#endif
...
system(pulisci);
Cmq anche con system("read") il programma non si ferma e va avanti :muro: :confused: .
wingman87
16-07-2008, 19:15
Ecco la mia soluzione, fammi sapere se funziona anche su linux:
#include <stdio.h>
int main(int argc,char*argv[]){
getchar();
fseek(stdin,0,SEEK_END);
getchar();
return 0;
}
Che intendi per retrocompatibile? Io sto scrivendo un programma in C e per quanto ne so io se rispetto lo standard non importa il sistema operativo.
Per adesso mi sa che l'unica soluzione è l'utilizzo di direttive. Ho trovato questa soluzione ma per adesso l'ho provata una mezza volta e mi ha dato un po di problemi. Dove la devo mettere?
#ifdef _WIN
const char* pulisci = "cls";
#elseif
#ifdef LINUX
const char* pulisci = "clear";
#else
#error "OS NOT SUPPORTED"
#endif
...
system(pulisci);
Cmq anche con system("read") il programma non si ferma e va avanti :muro: :confused: .
i fai quasi venir voglia di provare a scriverlo
cmq stamattina funzionava
se vuoi disimpegnarti dal sistema operativo allora ci vuole un getche();
occhio alle librerie ;)
pero' ho paura che vada solo su dos....
e la (giustamente) bistrattata scanf?
PS: Non tocco C puro dal 1993, e scanf forse l'ho usato una volta sola...
Ma un ide furbetto che ti tiene la finestra aperta? :fagiano:
Big Bamboo
16-07-2008, 22:11
Ma un ide furbetto che ti tiene la finestra aperta? :fagiano:
ma lanciare il programma da terminale? :)
ma lanciare il programma da terminale? :)
Vabè, può essere noioso, soprattutto se si fanno piccoli programmini di prova e si modificano più e più volte per testare il comportamento :D
cmq in genere un programma si sviluppa o per una piattaforma o per un'altra
se vuoi un prog indipendentemente dalla piattaforma devi fare un'applet java
salvodel
17-07-2008, 09:13
Premesso che io lo lancio da terminale, il problema è poter leggere dei dati a video prima che giunga alla fine il programma.
Il problema di lavorare su due sistemi operativi diversi è dovuto al fatto che il mio portatile scalda un pochino sotto Linux :mad: e dopo un po ritorno a Windows. Siccome queste sono quisquilie ("pause"&"clear") pensavo di risolverle in modo indolore.
Grazie a tutti per i suggerimenti.
Big Bamboo
17-07-2008, 10:22
Premesso che io lo lancio da terminale, il problema è poter leggere dei dati a video prima che giunga alla fine il programma.
se sei sotto linux, redirigi l'output su file con > e così non ci sono più problemi
salvodel
17-07-2008, 11:47
Lo so, ma era piu rapida una sbirciatina dei dati a video piuttosto che stampare n file.
Grazie
Provate con:
#include <stdio.h>
void pause(void)
{
scanf("%*[^\n]");
getchar();
}
int main(int argc, char **argv)
{
puts("Hello! Press return!");
pause();
puts("Please press that again!");
pause();
puts("OK, bye!");
return 0;
}
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.