真正解决'cin'和'getline'问题
A real solution to the 'cin' and 'getline' issue
如何摆脱前导' '和'n'符号当我不确定我会得到一个cin,在getline之前?
的例子:
int a;
char s[1001];
if(rand() == 1){
cin >> a;
}
cin.getline(s);
如果我在getline之前放一个cin.ignore(),我可能会失去字符串的第一个符号,所以我唯一的选择是把它放在每次使用'cin>>'之后吗?因为当你在做一个大项目时,这不是很有效的方法。
还有比这更好的方法吗?
int a;
string s;
if(rand() == 1){
cin >> a;
}
do getline(cin, s); while(s == "");
像这样:
std::string line, maybe_an_int;
if (rand() == 1)
{
if (!(std::getline(std::cin, maybe_an_int))
{
std::exit(EXIT_FAILURE);
}
}
if (!(std::getline(std::cin, line))
{
std::exit(EXIT_FAILURE);
}
int a = std::stoi(maybe_an_int); // this may throw an exception
可以用几种不同的方法解析字符串maybe_an_int
。您也可以使用std::strtol
,或字符串流(在与第一个if
块相同的条件下):
std::istringstream iss(maybe_an_int);
int a;
if (!(iss >> a >> std::ws) || iss.get() != EOF)
{
std::exit(EXIT_FAILURE);
}
当然,你可以更优雅地处理解析错误,例如,通过在循环中运行整个东西,直到用户输入有效的数据。
空格和换行符都被标准IOStreams分类为空白。如果您将格式化的I/O与未格式化的I/O混合在一起,并且需要清除剩余的空白流,请使用std::ws
操纵符:
if (std::getline(std::cin >> std::ws, s) {
}
相关文章:
- 我在C++中使用 getline() 函数时遇到问题
- 使用getline读取.csv文件时出现问题
- 此C Getline函数的C 代码有什么问题
- 如何在 for 循环中解决潜在的 getline() 问题,数组的第一个索引没有显示?
- 使用getline的问题
- 找不到用户定义的 getline。自动扣款有问题?
- 我在使用 cin.getline() 从用户那里获取 3 个字符串并使用指针数组来存储它们时遇到问题
- C++将csv读取到向量中,getline()问题
- 有人能解释一下getline和char的问题吗
- 用弦乐库解析行时的std :: getline问题
- C++:ifstream getline 问题交叉编译到 OpenWRT 发行版中
- getline() 函数的问题
- 使用getline函数时出现问题
- 使用 getline() 的字符串输入问题
- 注意:(getline不是问题所在)C++getline()停止在用户定义的函数中工作,但在主函数中工作
- 视觉C++ Getline 问题(没有重载函数"getline"实例
- 打开文件流输入的Getline问题
- Ifstream getline问题(它只读取第一行)
- c++中的Getline问题
- 真正解决'cin'和'getline'问题