gpt4 book ai didi

C++:只读取多个输入到行尾

转载 作者:行者123 更新时间:2023-11-28 05:26:12 24 4
gpt4 key购买 nike

这个程序应该如何工作:

Enter 4 words:

this is bad

Bad input.

Enter 4 words:

hello you love it

Good input.

我是如何尝试的:

#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++:只读取多个输入到行尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40507692/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com