Aeroneeee Ответов: 1

Cin пропускает и не просит ценности


class Order {
public:
	char customer[99];
	int numofOrd;
	int code[5];
	int quantity[5];

	void addOQ();
	bool updateOQ();
	void viewOQ();
};Order O[99];

void Order::addOQ() {
	char yn = 'y';
	cout << "Costumer Number " << orderNum;
	cout << "\nEnter customer name: ";
	cin >> O[orderNum].customer[99];
	cin.ignore('\n');
	
	for (int i = 1; tolower(yn) == 'y'; i++) {
		O[orderNum].numofOrd++;
		cout<< orderNum;
		cout << "Enter product code: ";
		cin >> O[orderNum].code[numofOrd];
			
		cout << "Enter quantity: ";
		cin >> O[orderNum].quantity[numofOrd];
		
		cout << "\nOrder added to queue\n";
		cout << "Add more?(Y|N)";
		cin >> yn;
	}
}


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

Он пропускает запрос кода и количества
что в этом плохого?
когда я ставлю cin. ignore, значение не сохраняется в переменной

1 Ответов

Рейтинг:
0

Michael_Davies

Цикл, который получает входные данные, имеет условие для проверки yn, равное "y", вы инициализируете yn с помощью "y", поэтому условие истинно, и цикл не выполняется ни разу.


Aeroneeee

Если я это сделаю

char yn='y';
while (tolower(yn)== 'y'){
O[orderNum]. numofOrd++;

cout<< " введите код продукта: ";
cin > & gt; O[orderNum]. code[numofOrd];

cout << " введите количество: ";
cin > & gt; O[orderNum]. quantity[numofOrd];

cout << " \nOrder добавлен в очередь\n";
cout << " добавить еще?(Y|N)";
cin > & gt; yn;
}

петля не останавливается. Я думаю, что проблема в cin?
Он не просит пользователя ввести значение.

Michael_Davies

Извините, цикл должен останавливаться, когда вы вводите любой символ, кроме y, вы говорите, что он не останавливается, если вы вводите, скажем, n?

Если вы хотите, чтобы цикл выполнялся хотя бы один раз, используйте Do... В то время как он будет тестировать условие после выполнения кода, а не до него.

Aeroneeee

Я тоже пробовал это сделать, но он не предложит пользователю ввести какое-либо значение.
Но он печатает код ввода и вводит количество.
Это означает, что цикл работает нормально.

Michael_Davies

Если cout для добавления больше не показывает, пожалуйста, будьте ясны.

Поставьте программу на паузу перед выходом, скопируйте консольный текст сеанса и вставьте его сюда, чтобы мы могли видеть, что происходит.

Aeroneeee

void Order:: addOQ() {
char yn = 'y';
соиь <&ЛТ; "количество клиентов" &ЛТ;&ЛТ; orderNum;
cout << " \nEnter имя клиента: ";
cin > & gt; O [orderNum].customer[99];

while (tolower(yn)== 'y'){
O[orderNum]. numofOrd++;

cout<< " введите код продукта: ";
cin > & gt; O[orderNum]. code[numofOrd];

cout << " введите количество: ";
cin > & gt; O[orderNum]. quantity[numofOrd];

cout << " \nOrder добавлен в очередь\n";
cout << " добавить еще?(Y|N)";
cin > & gt; yn;

система ("пауза");
}
}


Выход таков

Количество Клиентов 1
Введите имя клиента: Финн
Введите код продукта: введите количество:
Заказ добавлен в очередь
Добавить еще?(Y|N)нажмите любую клавишу, чтобы продолжить ...
Введите код продукта: введите количество:
Заказ добавлен в очередь
Добавить еще?(Y|N)нажмите любую клавишу, чтобы продолжить ...
Введите код продукта: введите количество:
Заказ добавлен в очередь
Добавить еще?(Y|N)нажмите любую клавишу, чтобы продолжить ...

Aeroneeee

Кстати спасибо за помощь :(

Michael_Davies

Что происходит, когда вы используете отладчик, чтобы увидеть значение в yn после его ввода.

Aeroneeee

Он показывает 0 ошибок и 0 предупреждений

Michael_Davies

Какое значение имеет значение yn после ввода символа, отличного от y? Проходя через отладчик, вы можете увидеть это значение переменной и проверить его, или же Эхо yn после ввода его так, чтобы оно отображалось на консоли.

Aeroneeee

Я инициализирую значение yn = 'y', а затем, когда я его запускаю, он не будет запрашивать значение.
Извините, я не понимаю.

Aeroneeee

Теперь он бежит. Я просто удаляю [99] из cin > & gt; O[orderNum].;