c++ - 从控制台读取字符串的不同方式实际上有何不同?运算符 <<、getline 还是 cin.getline?

标签 c++ input

假设我想从控制台读取一个整数,并且我不希望程序在输入非整数字符时中断。这就是我的做法:

#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/

相关文章:

c++ - 如何打印出给定范围内的直角三角形的周长和个数?

Java用户输入,声明为int?

javascript - windows.location.href 不起作用

c++ - 整数到二进制存储在数组中

c++ - 目标文件中的外部符号

C++ noexcept 规范取决于数据成员

jquery - 如何在 JQuery 旋钮中更改字体大小

javascript - 动态关闭 &lt;input&gt; 的自动填充菜单

c++ - Shell 输入作为变量

c++ - VS Express 2012 C++ lambda Intellisense 错误?