1
我已經寫了這段代碼,它旨在使用產品的參數istr來接收值,並且它一直工作正常,但是我意識到您不能只留下一個空白字段。我的一個領域涉及一個產品的單位,有些產品沒有單位,在這種情況下,用戶只需按Enter鍵即可繼續接收下一個值,但問題是它只是繼續換行,直到一個合適的價值被收到。我能做些什麼來接受空白值?我只專注於單位領域,但如果有人需要查看它,我提供了整個功能。以下是我的代碼:接受istream的空白值
std::istream& AmaProduct::read(std::istream& istr) { //receives values using istr argument
char skuField[10];
char nameField[100];
double priceField;
char taxField;
int qtyField;
char unitField[11];
int qtyNeededField;
if (!istr.fail()) {
err_.clear();
}
cout << "Sku: ";
istr >> skuField;
sku(skuField);
cout << "Name: ";
istr >> nameField;
name(nameField);
cout << "Unit: ";
istr >> unitField;
unit(unitField);
err_.clear();
cout << "Taxed? (y/n): ";
istr >> taxField;
if (taxField == 'Y' || taxField == 'y' || taxField == 'N' || taxField == 'n') {
taxed(taxField == 'Y' || taxField == 'y');
istr.ignore(500, '\n');
}
else {
err_.message("Only (Y)es or (N)o are acceptable");
istr.setstate(ios::failbit);
}
if (err_.isClear()) {
cout << "Price: ";
istr >> priceField;
price(priceField);
}
if (istr.fail() && err_.isClear()) {
err_.message("Invalid Price Entry");
}
if (err_.isClear()) {
cout << "Quantity On hand: ";
istr >> qtyField;
quantity(qtyField);
}
if (istr.fail() && err_.isClear()) {
err_.message("Invalid Quantity Entry");
}
if (err_.isClear()) {
cout << "Quantity Needed: ";
istr >> qtyNeededField;
qtyNeeded(qtyNeededField);
}
if (istr.fail() && err_.isClear()) {
err_.message("Invalid Quantity Needed Entry");
}
return istr;
}
}
你可以使用['std :: istringstream'](http://en.cppreference.com/w/cpp/io/basic_istringstream)來解析它。 –
我更喜歡lexical_cast。不知道它是否處於標準狀態。 –
@MinorThreat:[std :: lexical_cast - 是否有這樣的事情?](https://stackoverflow.com/questions/8065413/) –