@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; 
- } 
-   
В този пример въвеждането на повече от един символ се счита за невалидно.