Member 13435223 Ответов: 1

Мне нужна помощь, чтобы повторить эту программу... (программа с )


Привет, ребята. Я приветствую себя на сайте CodeProject, ха-ха!

(новичок в программировании здесь, но как-то может понять)

Так что давайте перейдем к делу...
Я сделал программу заказа ресторана, закодированную на языке Си, и все работает нормально вплоть до общей суммы и прочего...

Но я искал способы повторить всю эту программу,

и на данный момент я попробовал этот пример вывода следующим образом:

Ваш итог таков: ______

Хотите повторить?:

И каждый раз, когда я нажимаю Y, программа мгновенно заканчивается, а N не отображается

Конец


Что же мне делать? :/

Т. И. А.

-по отношению.

Что я уже пробовал:

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define p printf
#define s scanf

void Order();
void Breakfast();
void Lunch();
void Total(float totall);
void Repeat();

main()
{
	Order();
}

void Order()
{
	char choice;
	
	p("WELCOME TO JABEE iTECH!\n");
	p("WHICH FOOD COURSE TO ORDER?\n");
	p("A ---- BREAKFAST\n");
	p("B ---- LUNCH\n");
	p("CHOICE HERE: ");
	
	choice = toupper(getchar());
	getchar();
	switch(choice)
	{
		case 'A':
			Breakfast();
			break;
		case 'B':
			Lunch();
			break;
	}
}

void Breakfast()
{
	char choicee;
	float price, total;
	int qty;
	
	p("WELCOME TO BREAKFAST SECTION!\n");
	p("A ---- EGGS\n");
	p("B ---- BACON\n");
	p("CHOICE HERE: ");
	
	choicee = toupper(getchar());
	getchar();
	switch(choicee)
	{
		case 'A':
			p("YOU CHOSE EGGS\n");
			p("HOW MANY SERVINGS?: ");
			s("%d", &qty);
			
			price = 19.99;
			total = price * qty;
			
			Total(total);
			break;
			
		case 'B':
			p("YOU CHOSE BACON\n");
			p("HOW MANY SERVINGS?: ");
			s("%d", &qty);
			
			price = 29.99;
			total = price * qty;
			
			Total(total);
			break;
	}
}

void Lunch()
{
	char choiceee;
	float price, total;
	int qty;
	
	p("WELCOME TO LUNCH SECTION!\n");
	p("A ---- FISH\n");
	p("B ---- CHICKEN\n");
	p("CHOICE HERE: ");
	
	choiceee = toupper(getchar());
	getchar();
	switch(choiceee)
	{
		case 'A':
			p("YOU CHOSE FISH\n");
			p("HOW MANY SERVINGS?: ");
			s("%d", &qty);
			
			price = 39.99;
			total = price * qty;
			
			Total(total);
			break;
			
		case 'B':
			p("YOU CHOSE CHICKEN\n");
			p("HOW MANY SERVINGS?: ");
			s("%d", &qty);
			
			price = 49.99;
			total = price * qty;
			
			Total(total);
			break;
	}
}

void Total(float totall)
{
	p("YOUR TOTAL IS: %.2f\n", totall);
	
	Repeat();
}

void Repeat()
{
	char choiceeee;
	
	p("DO YOU WANT TO REPEAT?: ");
	s("%c", &choiceeee);
	switch(choiceeee)
	{
		case 'Y':
			main();
			break;
		case 'N':
			p("END");
			break;
	}
}

1 Ответов

Рейтинг:
1

OriginalGriff

Измените свой main функция:

main()
    {
    Order();
    }
Включите здесь цикл, который спрашивает пользователя, хочет ли он сделать это снова, а если нет, то выходит из цикла. Подсказка: а do...while петля, вероятно, была бы тем, что вы хотели. Внутри петли вы это делаете Order один раз, а потом спросите его, хочет ли он продолжать.
Затем удалите Repeat функция.


Member 13435223

Так что после того, как я немного повозился с вещами... Это то, что я пришел, до сих пор.

в функции 'main'

главный()
{
чар повторить;

делать{
Заказ();

п ("хочешь повторить?: ");
s ("%c", & amp; повтор);
}while (repeat == 'Y');
}

Что происходит сейчас, так это то, что после запуска всей функции заказа, и она просит меня повторить, где еще до того, как я что-то наберу, программа заканчивается. :/

OriginalGriff

Это, вероятно, потому, что у вас все еще есть мусор в очереди ввода - например, новая строка после последнего ввода заказа.
Поместите второй цикл на scanf, который отбрасывает все, что не является "y", "Y", "n" или "N" - вы можете поместить это в функцию GetYesNo и вернуть результат, который будет выглядеть чище.

RAMASWAMY EKAMBARAM

Вы можете избавиться от возможного "мусора во входной очереди" с помощью fflush(...)