Почему результат отличается, когда я нажимаю ввод в конце предложения?

Вот моя первая программа

#include <iostream>
#include <string>
using namespace std;

int main()
{
int a;
string s;
double d;
while(cin >> a >> s >> d)
cout << a << s << d;
return 0;
}

Когда я ввожу несколько простых данных и нажимаю Войти , результат показывается сразу:

образ

Однако код в другой программе ведет себя по-другому:

#include <iostream>
#include <string>
using namespace std;

struct Sales_data {
string bookNo;
unsigned units_sold = 0;
double price = 0.0;
void Print();
};

void Sales_data::Print(){//print every record of the Sales_data
cout << "The bookNo of the book is " << bookNo << endl;
cout << "The units_sold of the book is " << units_sold << endl;
cout << "The price of the book is " << price << endl;
}

int main()
{
Sales_data book;
while(cin >> book.bookNo >> book.units_sold >> book.price);
book.Print();
return 0;
}

Когда я запускаю этот код, введите некоторые данные и нажмите Войти, он ждет, когда я введу больше данных, чем покажу результат.

образ

Не могли бы вы объяснить это мне?

-3

Решение

Удалить точку с запятой после while петля. Как таковой, он заставляет цикл не иметь тела, что означает, что он просто циклически перебирает cin навсегда. Еще лучше использовать фигурные скобки для разграничения тела:

while(cin >> book.bookNo >> book.units_sold >> book.price) {
book.Print();
}
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]