Kontrola trkacji w C z stdio.h [begginer]

0

Witam mam taki przykladowy program:

#include <stdio.h>

void start(void);
void opcje(void);
void menu(void);

int main(int argc, char *argv[])
{

start();
menu();
opcje();
return 0;

}

void start(void)
{

printf("Naciśnij ENTER");
getchar();

}

void opcje(void)
{

int opcja;

printf("[!] Wybierz opcje");
printf("\n\n");
printf("1 - Pokaz date\n");
printf("2 - Wyłacz komputer\n");

scanf("%d", &opcja);

switch (opcja) {

case 1:
printf("Dzisiaj jest ...");
break;
case 2:
printf("Komputer wylaczony");
break;
default:
printf("Nie ma takiej opcji");
break;
}

}

void menu(void)
{

printf("\n\n********** by frag4 **********\n\n");

}


No i wszystko fajnie. Tylko jezeli mamy na ekranie:

<b><Naciśnij ENTER></b>

do wciskamy ENTER to jest ok. Ale jezeli wpiszemy np. 3 znaki i dopiero ENTER
to owe 3 znaki zostana przeslane do nastepnych "pytan" i program sie skonczy :(

Jak temu zapobiec ? Dodam ze bawilem sie funkcja scanf ale program sie wywalal :( Jak zrobic "idiotoodporny" program ? Dodam ze chcialbym skorzystac tylko z <stdio.h> + EWNETUALNIE jedna inna biblioteka jezeli sie nie da...

Dodam ze interesuja mnie tylko rozwiazania przenosne czyli zadnych tam DOS'owych pomyslow... ;D
0

Wpisz za pierwszym getchar():
fflush(stdin);

0

to nic nie dalo ! :-0
Nadal dzieje sie to samo ! Co moze byc tego przyczyna ?! Moj kod wyglada tak:

#include <stdio.h>

int u,v,d;

int main()
{

printf ("|****** Podaj cyfre u ******|\n");
u=getchar();
fflush(stdin);

printf ("|****** Podaj cyfre v ******|\n");
v=getchar();

}

Co robie zle ?! Z tego co wiedze to po prostu znak [ENETER] jest traktowany tak samo jak inne znaki... Jak to rozwiazac :(... Mo szczerze mowiac siedzej juz nad tym DLUUUUGO i nic nie moge wymyslec :(. A naprawde chce programowac w C
ale zeby cokolwiek sensownego napisac potrzeba mi "idioto odpornego" porgramu :(

</cpp>
0

Troszke lookania w rozne zrodla i tutoriale i znalazlem (chyba) rozwiazanie:

#include <stdio.h>
int u,v;

int main()
{
printf ("****** Podaj cyfre u ******\n");
scanf ("%d", &u);

printf ("****** Podaj cyfre v ******\n");
scanf ("%d", &v);
}

Dziala tak jak chcialem... no prawie ;D

1 użytkowników online, w tym zalogowanych: 0, gości: 1