PDA

View Full Version : [C] Aspetto.. o vado ?


max246
08-11-2005, 10:39
Ciao :)

Allora il mio problema ü questo... devo trovare una funzione che catturi tutto quello che viene schiacciato dalla tastiera ( ovviamento se si lavora sul programma ) senza che il programmi si fermi e aspetti che io premo un tasto...

Sapete aiutarmi? :(

cionci
08-11-2005, 12:03
In questo campo si rientra in argomenti che sono al di là dello standard del C... Mi devi dire sistema operativo e compilatore...

max246
08-11-2005, 12:53
Windows - Dev c++

cionci
08-11-2005, 15:39
allora dovresti avere unf ile chiamato conio.h... Ci sono le funzioni kbhit, che ritorna vero se è stato premuto un tasto, e la funzione getch, che legge un tasto senza a pressione dell'invio...

Quello che ti deve rimanere in testa è: QUESTE NON SONO FUNZIONI STANDARD
Usale il meno possibile e solo se non ne puoi fare a meno...

max246
08-11-2005, 16:37
in poche parole quello che ho prova a fare:

if (secondi == durata) {
goto inizioforzato;
}
else {
if(_kbhit()) {
if(getch() == 'n') {
numero_mp3++;
goto inizioforzato;
}
if(getch() == 'b') {
numero_mp3--;
goto inizioforzato;
}
}
}

cionci
08-11-2005, 17:08
Obbrobrio: goto inizioforzato

Non puoi mettere inizioforzato in un funzione ?!?!?

Oceans11
08-11-2005, 17:37
Obbrobrio: goto inizioforzato


Confermo e sottoscrivo!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

VegetaSSJ5
08-11-2005, 18:46
in poche parole quello che ho prova a fare:

if (secondi == durata) {
goto inizioforzato;
}
else {
if(_kbhit()) {
if(getch() == 'n') {
numero_mp3++;
goto inizioforzato;
}
if(getch() == 'b') {
numero_mp3--;
goto inizioforzato;
}
}
}

:rotfl:

PICCOLO ANEDDOTO
sto programmando in c# per un'azienda. non conoscevo questo linguaggio ma pensavo che riprendesse lo stile del c/c++. questo è in parte vero ma poi oggi ho usato per la prima volta uno switch. in c se non viene inserito un break alla fine del case il flusso del programma continua con il case successivo per cui ho fatto così, ma mi dava un errore in fase di compilazione... così ho scoperto che alla fine per far continuare il flusso del programma al case successivo bisogna inserire goto case "nome". ecco la mia faccia quando ho letto questo sul manuale... :eek: secondo me quelli della microsoft devono usare meno sostanze stupefacenti, perhcè secondo me ne fanno uso abbondante...

max246
08-11-2005, 19:07
vabbe oltre alla mia fissa sui goto :P mi aiuti nel codice? :D perche in un qualche modo non funziona a dovere.... ( anche se ho un po d mal di testa.. forse per quello :confused: ).

cionci
08-11-2005, 19:09
A me sembra corretto :confused:

Fenomeno85
08-11-2005, 19:15
io non mi spiego chi mai insegna il goto :muro:

accidenti non sei in assembly :D


~§~ Sempre E Solo Lei ~§~

max246
08-11-2005, 19:22
io non mi spiego chi mai insegna il goto :muro:

accidenti non sei in assembly :D


~§~ Sempre E Solo Lei ~§~

a me piace :D ghgh poi non capisco.. cosa c'è che nn vi piace? :S

max246
08-11-2005, 19:26
Rox Rox funziona :D scemo io che non ho testato... :)

Cmq ho un'altro problema da esporvi....

Come faccio a creare un programma che se scrivo: nomefile.exe /lista
mi apre il programma e mi scrive solo una lista di nomi?

cioè in poche parole se gli dai un'atributo.. informazione... faccia un comando:P

cionci
08-11-2005, 19:36
int main(int argc, char *argv[])
{
if(argc == 2)
if(!strcmp(argv[1], "/lista"))
stampaLista();
}

max246
08-11-2005, 20:04
int main(int argc, char *argv[])
{
if(argc == 2)
if(!strcmp(argv[1], "/lista"))
stampaLista();
}



argc e argv sono variabili inventate? il 2 ha una sua specifica? :P ghgh

max246
08-11-2005, 20:12
funziona funziona... pero come faccio a dirgli di aprire il file, cioè ho il programma aperto che esegue gli mp3 .... e voglio che esegue lo stesso programma solamente che visualizza la lista .. con SYSTEM me lo scrive direttamente nel programma.

:confused: :confused: :confused: :confused:

VegetaSSJ5
08-11-2005, 20:20
argc e argv sono variabili inventate? il 2 ha una sua specifica? :P ghgh
non sono inventati, sono standard C. argc ti dà il numero di parametri con cui hai lanciato il programma. il minimo valore è 1 perchè è compreso anche il nome del programma stesso. argv è un vettore di stringhe che contiene tutti i parametri che inserisci da linea di comando. argv[0] contiene il nome del file dell'eseguibile.

cionci
08-11-2005, 20:22
argc e argv sono variabili inventate? il 2 ha una sua specifica? :P ghgh
Gli puoi mettere il nome che ti pare, ma storicamente gli argomenti del main hanno quel nome...
argc = argument counter (il numero di stringhe in argv)
argv = gli aromenti...argv[0] è sempre il nome del file (con eventuale path da cui questo è stato lanciato)

Se argc == 1 è impostato solo argv[0]...se argc == 2 è impostato anche argv[1] e così via...

Fenomeno85
08-11-2005, 20:23
a me piace :D ghgh poi non capisco.. cosa c'è che nn vi piace? :S

cos'è che non vi piace? :mbe:

è una programmazione di mierda :D e poi puoi fare dei casini pazzeschi con i goto.

~§~ Sempre E Solo Lei ~§~

Fenomeno85
08-11-2005, 20:24
Gli puoi mettere il nome che ti pare, ma storicamente gli argomenti del main hanno quel nome...
argc = argument counter (il numero di stringhe in argv)
argv = gli aromenti...argv[0] è sempre il nome del file (con eventuale path da cui questo è stato lanciato)

Se argc == 1 è impostato solo argv[0]...se argc == 2 è impostato anche argv[1] e così via...

minimo è 1 per forza :)

~§~ Sempre E Solo Lei ~§~

max246
08-11-2005, 20:27
funziona funziona... pero come faccio a dirgli di aprire il file, cioè ho il programma aperto che esegue gli mp3 .... e voglio che esegue lo stesso programma solamente che visualizza la lista .. con SYSTEM me lo scrive direttamente nel programma.

:confused: :confused: :confused: :confused:

Ok grazie... :P ora mi rispondente per questo /\
-
-
-
-
-

Siete troppo dei miti :D :sofico:

Fenomeno85
08-11-2005, 20:30
dipende dal programma devi intercettare come si fa a richiamarlo nel programma.

~§~ Sempre E Solo Lei ~§~

VegetaSSJ5
08-11-2005, 20:31
io non ho proprio capito la domanda... :mbe:

Fenomeno85
08-11-2005, 20:34
io non ho proprio capito la domanda... :mbe:

vuole che la lista dei brani venga messa nella lista del lettore ;)

~§~ Sempre E Solo Lei ~§~

max246
08-11-2005, 20:39
voglio aprire lo stesso programma ... invece di aprire un blocco note con dentro i nomi delle song.. apri lo stesso programma solamente che scrive la lista dei brani e poi si ferma....

max246
09-11-2005, 11:25
vabbe visto che nessun risponde eccovi un'altro dilemma :D

if(_kbhit()) {
if(getch() == 'n') {
numero_mp3 = mp3mode('n',numero_mp3,num_mp3-1);
goto inizioforzato;
}
else if(getch() == 'b') {
numero_mp3 = mp3mode('b',numero_mp3,num_mp3-1);
goto inizioforzato;
}
else if(getch() == 'a') {
FSOUND_SetVolume(FSOUND_ALL,0);
}
else if(getch() == 's') {
FSOUND_SetVolume(FSOUND_ALL,255);


}
else {
goto sopra;
}
}

come faccio a non dirgli di cliccare di nuovo un tasto... cioè appena lo schiaccia entra nell'if e senza fare un GETCH mi dice che tasto era... :stordita:

cionci
09-11-2005, 11:33
come faccio a non dirgli di cliccare di nuovo un tasto... cioè appena lo schiaccia entra nell'if e senza fare un GETCH mi dice che tasto era... :stordita:
Snceramente non ho capito, fai un esempio con un codice indicando anche i tasti premuti...

max246
09-11-2005, 12:08
Allora per questo libreria ( penso tutte... ) per far si che senti il suono ha bisogno di un ciclo infinito fino quando non schiacci un tasto o altro, giusto?

Ecco, allora io ho fatto si che se viene scelto il numero 0 il ciclo si ferma, in questo ciclo viene inserito uno spleep di 1 secondo per fare un "mini contatore di secondi".
Poi controlla se i secondi sono uguali alla durata della song, se si rinizia la stessa canzone, altrimenti guarda se hai premuto un bottone e in seguito ti fa quel codice....

cionci
09-11-2005, 12:14
La sleep non è adatta, controlla semplicemente l'ora in secondi in cui hai iniziato a sentire la canzone e l'ora attuale... Se si supera la durata della canzone falla ripartire...

max246
09-11-2005, 12:26
vabbe tante funzioni non sono estramemente adatte.. pero si possono usare..

ritornando... mi si puo far si che avendo schiacciato quel tasto non mi venga eseguito il GETCH avendo gia memorizzato il tasto?

cionci
09-11-2005, 12:33
vabbe tante funzioni non sono estramemente adatte.. pero si possono usare..
Usare una sleep provoca che la tua applicazione reagisca all'input solo dopo un secondo...se vuoi che succeda questo continua pure così... Senza contare che è probabile che con la sleep di un secondo il player possa avere altri problemi...

ritornando... mi si puo far si che avendo schiacciato quel tasto non mi venga eseguito il GETCH avendo gia memorizzato il tasto?
Quale tasto ? Non capisco... Vuoi dire che se viene premuto due volte los tesso tasto una funzione venga lanciata solo la prima volta ?

max246
09-11-2005, 12:46
siiiiiiiiiiii :D :D

cionci
09-11-2005, 12:50
Questo è un problema figlio della sleep...altrimenti avresti un kbhit per ogni tasto...

void flushInputBuffer()
{
while(kbhit())
getch();
}

if(_kbhit()) {
if(getch() == 'n') {
flushInputBuffer()
numero_mp3 = mp3mode('n',numero_mp3,num_mp3-1);
goto inizioforzato;
}

Ovviamente devi fare un flush per ogni if...