我正在創建一個簡單函數printNode,它接受一個int或字符串「all」,並打印相應的輸出。該函數的INT方面效果很好,但是當我打電話使用stringstream.fail()檢查輸入是int還是字符串
printNode all
功能打印「錯誤:無效的參數」,我似乎無法找出原因。
int main() {
...
getline(cin, line)
stringstream lineStream(line);
stringstream elineStream(line);
printNode(lineStream, elineStream);
...
}
int printNode(stringstream& lineStream, stringstream& elineStream) {
//String aspect of printNode
int nodeid;
string name;
// Parsing nodeid or name
lineStream >> nodeid;
// If parsing to nodeid fails, check if input is string "all"
if (lineStream.fail()) {
elineStream >> name;
if (elineStream.fail()) {
if (elineStream.eof()) {
cout << "Error: too few arguments" << endl;
return 0;
}
else {
cout << "Error: invalid argument" << endl;
return 0;
}
}
if (name != "all") {
cout << "Error: invalid argument" << endl;
return 0;
}
// Check for too many arguments
elineStream >> ws;
if (!elineStream.eof()) {
cout << "Error: too many arguments" << endl;
return 0;
}
// Print output for input "all"
cout << "Print: all nodes" << endl;
return 1;
}
任何幫助將不勝感激。
再多做一點工作,您就可以將其作爲一個獨立的,可編輯的示例。另外,請注意,你應該返回0成功,1返回失敗 - 你是這樣做倒退。 –
@JohnZwinck關於成功/失敗的'1' /'0',爲什麼不只是返回一個'bool'? –
@JoachimPileborg:你說得很對!我把它混合起來,並從main()中讀取這些返回值。他們會比布爾(或例外)更好。 –