该程序应如何工作:
输入4个字:
这是不好的
输入错误。
和
输入4个字:
你好,你喜欢它
好的输入。
我如何尝试的:
#include <iostream>
#include <string>
using namespace std;
int main(void) {
cout << "Enter 4 words:" << endl;
string a, b, c, d;
cin >> a >> b >> c >> d;
}
它在行尾之后读取输入,但我不知道如何将其限制为仅一行。您能指出我应该使用什么功能吗?我会很感激每个答案。
谢谢你们!
最佳答案
当程序的预期输入来自交互式终端时,应使用std::getline()
。
这就是std::getline()
的作用:它将读取文本,直到换行符为止。 operator>>
不会那样做,这就是std::getline()
所做的,那才是用来处理一行键入文本的内容。使用正确的工具进行正确的工作。
可悲的是,许多C ++书籍和教程在介绍>>
之前就过早引入std::getline()
并在示例中使用它,只是因为>>
处理所需的数据类型转换更容易,更方便。不幸的是,这会导致错误的思维定势,其中>>
被认为是处理交互式输入的自动选择。它不是。
正确的方法是使用std::getline()
。然后,如有必要,构造一个std::istringstream
,并使用它来处理来自输入输入的任何类型转换。这不仅解决了眼前的问题,还解决了无法解析的输入将std::cin
置于失败状态的问题,所有后续尝试的输入转换也都失败了-这是另一个常见的陷阱。
因此,首先使用std::getline()
:
#include <string>
#include <iostream>
#include <sstream>
#include <vector>
int main(void) {
std::cout << "Enter 4 words:" << endl;
std::string line;
std::getline(std::cin, line);
现在,一旦输入了文本行,就可以将其转换为
std::istringstream
: std::istringstream i(line);
后跟一个循环,反复调用
>>
以便计算此行中的单词。这部分您可以自己完成。附言另一个常见的陷阱是
using namespace std;
。 You should not do that, as well。越早获得良好的编程实践,朝着C ++大师主义的发展之路就越容易。关于c++ - C++:仅读取多个输入到行尾,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40507692/