Автор Тема: getchar() не работи от пъривя път.  (Прочетена 3584 пъти)

b2l

  • Напреднали
  • *****
  • Публикации: 4786
  • Distribution: MCC Interim
  • Window Manager: - // - // -
  • ...sometimes I feel like screaming... || RTFM!
    • Профил
    • WWW
Re: getchar() не работи от пъривя път.
« Отговор #15 -: Aug 31, 2009, 22:15 »
Аз бих завъртял do...while цикъл.
Активен

"Човекът е въже, опънато между звяра и свръхчовека, въже над пропаст. Човекът е нещо, което трябва да бъде превъзмогнато." - Фр. Ницше

completer

  • Напреднали
  • *****
  • Публикации: 347
  • Distribution: Debian 6.0
  • Window Manager: Gnome
    • Профил
    • WWW
Re: getchar() не работи от пъривя път.
« Отговор #16 -: Aug 31, 2009, 23:19 »
Благодаря на всички за отговорите!!!
Така да кажа какво става.
Пробвах начина на ludsic и той  се получи.
Обаче нещо не ми се върза номера на romeо_ninov извинявай ако изглеждам глупаво като задам този въпрос но така ли трябва да изглежда  фрагмента от прогрмата

Код
GeSHi (C):
  1. while(ch!='n' && ch!='y'){
  2. printf("Go back to main menu? (y/n)");
  3. ch=getc(stdin);
  4. if(ch=='y') main();
  5. else if(ch=='n'){
  6. printf("Exitting..\n");
  7. break;
  8. }

питам защото по този начин getc също чака за връщане на каретката демек Enter :)
А доколкото за начина на Iron_steel ще ми трябва малко повече време да го осмисля защото още не съм работил с ncurses.
« Последна редакция: Aug 31, 2009, 23:33 от completer »
Активен

I'm using Linux and i'm proud of it!!!
I hate Windows and i'm also proud of it!!! :)

dvasilev

  • Напреднали
  • *****
  • Публикации: 200
  • Distribution: Kubuntu, Debian
  • Window Manager: KDE
    • Профил
    • WWW
Re: getchar() не работи от пъривя път.
« Отговор #17 -: Sep 01, 2009, 21:20 »
@completer: Предполагам, това ти трябва.
Код
GeSHi (C):
  1. int multiply_second_line(void)
  2. {
  3.  
  4. int ch = 'm';
  5. printf("ENTER\n");
  6.  
  7. while(ch != 'n' && ch !='y')
  8. {
  9. if (ch != '\n') printf("Go back to main menu? (y/n)");
  10. ch = getchar();
  11. if(ch=='y') main(); /*ако "да" се връща в главната функция*/
  12. else if(ch=='n')
  13. {
  14. printf("Exitting..\n");
  15. break;
  16. }
  17. }
  18. return 0;
  19. }
  20.  
Разликата спрямо твоя вариант е, че като прочете знака за край на ред, не извежда съобщение.

Освен това имай  предвид, че getchar връща int, а не char. Също така не ми е ясно какво се очаква да се случи при въвеждане на 'yyy', 'ynn', 'yrrn' или други подобни комбинации. Едно съм сигурен, че този вариант се държи доста по-консистентно, от примера в книгата.

Също така, като ще четеш символ по символ, по-добре си направи краен автомат.
Код
GeSHi (C):
  1. int multiply_second_line(void)
  2. {
  3.  
  4. int ch;
  5. printf("ENTER\n");
  6. int state = 0; // 0 -> init, 1-> y, 2->n, 3 -> other, 4->exit
  7. printf("Go back to main menu? (y/n)");
  8. while(state != 4)
  9. {
  10. ch = getchar();
  11. switch (state)
  12. {
  13. case 0:
  14. if (ch == 'y') state = 1;
  15. else if (ch == 'n') state = 2;
  16. break;
  17. case 1:
  18. if (ch == '\n')
  19. {
  20. main();
  21. state = 4;
  22. }
  23. else state = 3;
  24. break;
  25. case 2:
  26. if (ch == '\n')
  27. {
  28. printf("Exitting..\n");
  29. state = 4;
  30. }
  31. else state = 3;
  32. break;
  33. case 3:
  34. if (ch == '\n')
  35. {
  36. printf("Go back to main menu? (y/n)");
  37. state = 0;
  38. }
  39. break;
  40. default:
  41. break;
  42. }
  43. }
  44. return 0;
  45. }
  46.  
В този пример въвеждането на повече от един символ се счита за невалидно.
Активен

ludsic

  • Напреднали
  • *****
  • Публикации: 71
    • Профил
Re: getchar() не работи от пъривя път.
« Отговор #18 -: Sep 02, 2009, 00:05 »
//offtopic
хихи! краен автомат :) аре да ми вземеш изпита по дискретна :D
Активен

B4 02 B2 4C CD 21 B2 61 CD 21 B2 6D CD 21 B2 65 CD 21 B2 72 CD 21 B4 4C B0 00 CD 21 00 00 00 00

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Re: getchar() не работи от пъривя път.
« Отговор #19 -: Sep 02, 2009, 00:14 »
Забравихте да проверявате и за главни букви :)
Активен

"Knowledge is power" - France is Bacon

completer

  • Напреднали
  • *****
  • Публикации: 347
  • Distribution: Debian 6.0
  • Window Manager: Gnome
    • Профил
    • WWW
Re: getchar() не работи от пъривя път.
« Отговор #20 -: Sep 03, 2009, 00:16 »
Блаодаря на всички за отзивите!!! Изглежда начина на dvasilev e най-удачен за сегашнто ми състояние на приетите знания от книгата.Сега вече ще си довърша програмата, която всъщност е за решаване на матрици по висша математика.Благодаря много пак на всички !
Активен

I'm using Linux and i'm proud of it!!!
I hate Windows and i'm also proud of it!!! :)

bop_bop_mara

  • Напреднали
  • *****
  • Публикации: 2433
  • Distribution: Debian Testing
  • Window Manager: LXDE
  • Cute and cuddly
    • Профил
Re: getchar() не работи от пъривя път.
« Отговор #21 -: Sep 03, 2009, 00:58 »
//offtopic
Не я довършвай, за твое добро... ;)
Активен

completer

  • Напреднали
  • *****
  • Публикации: 347
  • Distribution: Debian 6.0
  • Window Manager: Gnome
    • Профил
    • WWW
Re: getchar() не работи от пъривя път.
« Отговор #22 -: Sep 03, 2009, 10:54 »
//offtopic
решил съм че сега ще я довърша,а после след като почна да уча за масиви и те подобни да я подобрвам след всеки раздел, така ще направя голяма разлика между нещата.
Активен

I'm using Linux and i'm proud of it!!!
I hate Windows and i'm also proud of it!!! :)