所以我有下一个问题,我试图输入两个字符串,一个可以是null其他必须。我试过
cin>> param1>>param2
请注意,param1不能为null param 2可以为null。当param2为空时不起作用。
接下来我尝试使用getline(cin,param1)
和getline(cin,param2)
这有效,但我需要在控制台应用程序中提供两行参数。
我需要在一行中从控制台param1,param2中读取。 请注意,我是这种编程语言的初学者。
由于
答案 0 :(得分:2)
cin
用于读取,因此流方向是反向的:
cin >> param1 >> param2;
答案 1 :(得分:1)
是的,这不起作用,因为cin
然后等待第二个参数。
您需要使用getline()
并手动解析字符串。
一种可能性是这样做:
string params, param1, param2;
getline(cin, params);
istringstream str(params);
str >> param1 >> param2;
请注意,如果只传递了一个参数,则param2将为空,因为stringstream结束(cin不结束)。
话虽如此,这仍然不适用于像
"parameter 1 with spaces" "parameter 2 with spaces"
因为istream只是在空格上分割而不处理引号。
通常,当应用程序需要参数时,argc
的{{1}}和argv
参数用于从应用程序命令行获取它们(引用也起作用)
答案 2 :(得分:1)
cin
是std::istream
的模型。对于任何istream,stream >> x
的结果是对istream
本身的引用。
istream
包含一些标志,用于指示先前操作的成功或失败。
istream
也可转换为bool
。如果先前的操作成功,则bool的值将为true
,否则将为false(出于任何原因)。
因此,如果我们愿意,我们不仅可以链接>>
操作,还可以连接其他支票。
这可能有点先进,但我认为你会发现它很有趣。 您可以按原样编译和运行该程序。
#include <iostream>
#include <string>
#include <sstream>
#include <iomanip>
struct success_marker
{
success_marker(bool& b)
: _bool_to_mark(std::addressof(b))
{}
void mark(bool value) const {
*_bool_to_mark = value;
}
bool* _bool_to_mark;
};
std::istream& operator>>(std::istream& is, success_marker marker)
{
marker.mark(bool(is));
return is;
}
success_marker mark_success(bool& b) {
return success_marker(b);
}
void test(const std::string& test_name, std::istream& input)
{
bool have_a = false, have_b = false;
std::string a, b;
input >> std::quoted(a) >> mark_success(have_a) >> std::quoted(b) >> mark_success(have_b);
std::cout << test_name << std::endl;
std::cout << std::string(test_name.length(), '=') << std::endl;
std::cout << have_a << " : " << a << std::endl;
std::cout << have_b << " : " << b << std::endl;
std::cout << std::endl;
}
int main()
{
std::istringstream input("\"we have an a but no b\"");
test("just a", input);
// reset any error state so the stream can be re-used
// for another test
input.clear();
// put new data in the stream
input.str("\"the cat sat on\" \"the splendid mat\"");
// test again
test("both a and b", input);
return 0;
}
预期产出:
just a
======
1 : we have an a but no b
0 :
both a and b
============
1 : the cat sat on
1 : the splendid mat