2017-08-08 12 views
1

このコードは、製品の引数istrを使用して値を受け取ることを目的としていますが、うまくいきましたが、空白のままにすることはできません。私のフィールドの1つは製品のユニットを扱い、いくつかの製品はユニットを持っていません。その場合、ユーザーは単に次の受け取った値に進むために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; 
    } 
} 

答えて

2

std::getline()経由で値を読みます。空でない文字列を取得した場合は解析し、そうでない場合はスキップします。

+0

そして、それを解析するために['std :: istringstream'](http://en.cppreference.com/w/cpp/io/basic_istringstream)を使うことができます。 –

+0

私はlexical_castのようなものを好むだろう。それが標準であるかどうかわからない。 –

+0

@MinorThreat:[std :: lexical_cast - そのようなものはありますか?](https://stackoverflow.com/questions/8065413/) –

関連する問題