假设我想从控制台读取一个整数,并且我不希望程序在输入非整数字符时中断。这就是我的做法:
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int main() {
string input; int n;
cin >> input;
if(!(stringstream(input)>>n)) cout << "Bad input!\n";
else cout << n;
return 0;
}
但是,我看到 http://www.cplusplus.com/doc/tutorial/basic_io/使用 getline(cin,input)
而不是 cin >> input
。这两种方法有什么相关的区别吗?
另外我想知道,因为 string
应该没有任何长度限制......如果有人将 10GB 长的字符串传递给这个程序会发生什么?将输入存储在有限长度的字符表中并使用例如 cin.getline(input,256)
不是更安全吗?
最佳答案
std::getline
得到一个行(包括空格)并且还读取(但丢弃)结尾的换行符。 input operator >>
读取一个以空格分隔的“单词”。
例如,如果您的输入是
123 456 789
使用 std::getline
将为您提供字符串 "123 456 789"
,但使用输入运算符 >>>
您将获得只有 "123"
。
理论上 std::string
没有限制,但实际上它当然受限于它可以分配的内存量。
关于c++ - 从控制台读取字符串的不同方式实际上有何不同?运算符 <<、getline 还是 cin.getline?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31229389/