ďťż

Ładny brzuch

wkleilem tylko funkcje main bo ona odzwierciedla moj problem, zrobilem takie menu ze poprostu zeby wybrac opcje chcialem zeby drukowalo ":" i nie wiem czemu po pierwszym wywolaniu drukuje juz ":" dwa razy, niby taka [ciach!]a, ale chce wiedziec dlaczego sie tak dzieje i jak temu zapobiec, prosze o wytlumaczenie, pozdrawiam.

main() { char znak; printf("\n\nO - open list of students from file\nS - save list of students to file\nI - introduce list of students\nQ - quit\n"); while( (znak != 'q') || (znak != 'Q') ){ printf(":"); scanf("%c",&znak); switch(znak) { case 'O': case 'o': open(); break; case 'S': case 's': save(); break; case 'I': case 'i': introduce(); break; case 'Q': case 'q': break; } } printf("baj baj maszkaro\n"); }
Użytkownik kuba bobas edytował ten post 24 luty 2008, 11:46


gdy odczytujesz wejście za pomocą scanf() w buforze pozostają wszystkie znaki, które wprowadziłeś, również naciśnięty Enter, czyli znak końca linii '\n'. Żeby zapobiec wyświetlaniu kilku znaków ':' musisz pobierać tylko pierwszy znak z bufora, porzucając pozostałe, najlepiej to zrobić funkcją getchar() oraz pętlą while(), np pisząc dodatkową funkcję:

int PobierzPierwszyZnak(void) { int Znak = getchar(); while(getchar() != '\n') continue; return Znak; }
i używając jej zamiast scanf() w tym miejscu:
... while( (znak != 'q') && (znak != 'Q') ){ printf(":"); znak = PobierzPierwszyZnak(); ...

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •