@completer: Предполагам, това ти трябва.
GeSHi (C):
int multiply_second_line(void)
{
int ch = 'm';
while(ch != 'n' && ch !='y')
{
if (ch
!= '\n') printf("Go back to main menu? (y/n)");
ch = getchar();
if(ch=='y') main(); /*ако "да" се връща в главната функция*/
else if(ch=='n')
{
break;
}
}
return 0;
}
Разликата спрямо твоя вариант е, че като прочете знака за край на ред, не извежда съобщение.
Освен това имай предвид, че getchar връща int, а не char. Също така не ми е ясно какво се очаква да се случи при въвеждане на 'yyy', 'ynn', 'yrrn' или други подобни комбинации. Едно съм сигурен, че този вариант се държи доста по-консистентно, от примера в книгата.
Също така, като ще четеш символ по символ, по-добре си направи краен автомат.
GeSHi (C):
int multiply_second_line(void)
{
int ch;
int state = 0; // 0 -> init, 1-> y, 2->n, 3 -> other, 4->exit
printf("Go back to main menu? (y/n)");
while(state != 4)
{
ch = getchar();
switch (state)
{
case 0:
if (ch == 'y') state = 1;
else if (ch == 'n') state = 2;
break;
case 1:
if (ch == '\n')
{
main();
state = 4;
}
else state = 3;
break;
case 2:
if (ch == '\n')
{
state = 4;
}
else state = 3;
break;
case 3:
if (ch == '\n')
{
printf("Go back to main menu? (y/n)");
state = 0;
}
break;
default:
break;
}
}
return 0;
}
В този пример въвеждането на повече от един символ се счита за невалидно.