在 C++ 中使用 getline()
Using getline() in C++
我在使用 getline 方法获取用户键入的消息时遇到问题,我正在使用以下内容:
string messageVar;
cout << "Type your message: ";
getline(cin, messageVar);
但是,它并没有停止获取输出值,这有什么问题?
如果您在 cin >> something
之后使用 getline()
,则需要将换行符从缓冲区中清除。您可以使用 cin.ignore()
.
它会是这样的:
string messageVar;
cout << "Type your message: ";
cin.ignore();
getline(cin, messageVar);
发生这种情况是因为>>
运算符在输入缓冲区中保留换行符n
。当您执行无格式输入(如 getline()
)时,这可能会成为一个问题,它会读取输入,直到找到换行符。发生这种情况,它将立即停止读取,因为您之前的操作中留下的n
挂在那里。
如果你的
输入中只有一个换行符,只需做
std::cin.ignore();
将正常工作。它读取并丢弃输入中的下一个字符。
但是,如果除了换行符之外,输入中还有其他内容(例如,您阅读了一个单词,但用户输入了两个单词),那么您必须这样做
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), 'n');
例如,请参阅ignore
函数的参考。
为了更安全,请在循环中执行上述第二个替代项,直到gcount
返回零。
我也有类似的问题。 一个缺点是 cin.ignore()
,您必须再按回车键 1 次,这会弄乱程序。
int main(){
.... example with file
//input is a file
if(input.is_open()){
cin.ignore(1,'n'); //it ignores everything after new line
cin.getline(buffer,255); // save it in buffer
input<<buffer; //save it in input(it's a file)
input.close();
}
}
我知道
我迟到了,但我希望这很有用。逻辑是当用户想要输入多行时一次取一行
int main()
{
int t; // no of lines user wants to enter
cin>>t;
string str;
cin.ignore(); // for clearing newline in cin
while(t--)
{
getline(cin,str); // accepting one line, getline is teminated when newline is found
cout<<str<<endl;
}
return 0;
}
输入 :
3
政府拼贴 伯汉波尔
塞兰波尔纺织品拼贴画
伯汉波尔塞兰波尔
输出 :
政府拼贴 伯汉波尔
塞兰波尔纺织品拼贴画
伯汉波尔塞兰波尔
我认为您没有在程序结束之前暂停程序,因此您在获得 inpus 后放置的输出在屏幕上看不到对吗?
做:
getchar();
在计划结束之前
代码是正确的。问题一定出在别的地方。尝试 std::getline 文档中的简约示例。
main ()
{
std::string name;
std::cout << "Please, enter your full name: ";
std::getline (std::cin,name);
std::cout << "Hello, " << name << "!n";
return 0;
}
相关文章:
- Seg Fault Issue C++ (file IO / getline)
- 当用户键入分隔符时,停止getline()输入
- getline() 的原型/库是什么;
- 错误 没有与参数列表匹配的重载函数"getline"实例
- 如何在 c++ 中使用 ',' 作为 getline 分隔符
- 错误:调用'getline'没有匹配函数
- 如何在 c++ 中使用 getline 从文件中读取字符串?
- 将 getline() 与文件一起使用
- 我有三个 getline,但是一旦编译,输入就太多了
- 在 std::getline 和 std::cin 期间卡在循环中
- 为什么 getline() 不读取文本文件中的所有内容?
- 有没有办法在不使用 getline() 的情况下从.csv文件中读取?
- 确切地说,如何解释 std::getline(stream, string) 函数在C++中填充的字符串
- std::getline没有在while循环中重新请求用户输入
- 谁能告诉我我用 getline 做错了什么 (cpp) 格式
- Getline(cin,str)的奇怪输出
- 我在C++中使用 getline() 函数时遇到问题
- 而循环跳过 cin.getline() 对于 C 字符串
- 如何在 getline 中删除/忽略超过特定数字的字符?
- 使用 getline(cin, var) 两次在进行字符串比较时会产生错误 (==)