【发布时间】:2013-10-11 16:20:43
【问题描述】:
我正在创建一个简单的函数 printNode,它接受一个 int 或字符串“all”,并打印相应的输出。该函数的 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()。将它们作为 bool(或异常)会更好。
标签: c++ string input int stringstream