C++ 中的一行中有多个输入

Multiple inputs in one line in C++

提问人:RiverX15 提问时间:11/30/2022 最后编辑:RiverX15 更新时间:11/30/2022 访问量:160

问:

我刚开始学习C++,但遇到了这个问题。我需要在一行中插入(用户输入的)数量的元素,并带有空格分隔。如果知道元素的数量,我可以写.但是我该如何使用任意数量的元素(也许是循环)来做到这一点呢?cin >> var1 >> var2 >> ... >> varN;

这就是我正在尝试做的:

#include<bits/stdc++.h>
using namespace std;

int main() {
    int n;
    cin >> n;
    int arr[n];
    for (int i=0; i<n; i++) {
        //stuck here
    }
}

我本可以写并继续,但这需要用户在每次输入后按回车键,由于问题的限制,我无法做到这一点。如何编写代码,以便可以在一行中给出数组元素的所有输入?cin >> arr[i];

PS:我已经在网站上看到过几个类似的问题,但其中大多数都涉及使用向量的实现,或者超出了我目前的理解水平。一个更简单的解决方案将不胜感激。

C++ IOstream CIN

评论

1赞 hackinghorn 11/30/2022
那么,您希望在用户键入空格后立即读取每个空格吗?这有点奇怪。它对您想要实现的最终目标有影响吗?你能详细说明一下你在做什么(如果可能的话)吗?arr[i]
1赞 hackinghorn 11/30/2022
元素是空格分隔的,因此在按 Enter 键后都会读取它们
0赞 463035818_is_not_an_ai 11/30/2022
没有一种语言叫做 C/C++。如果你想了解C++你应该阅读这篇文章 为什么我不应该 #include < bits/stdc++.h> 也许这个 为什么“使用命名空间 std;”被认为是不好的做法?.请注意,C 和 C++ 是两种不同的语言。
2赞 john 11/30/2022
“但这需要用户在每次输入后按回车键”这是完全不正确的,你从哪里得到这个想法?
1赞 fabian 11/30/2022
VLA 不是 C++ 标准的一部分,因此不应使用。不过,你对你所描述的行为是不正确的,请参阅 godbolt.org/z/WqbfrnrMd

答:

4赞 Devansh_Jain_21 11/30/2022 #1

cin>>arr[i]不需要用户在每次输入后都按回车键。 您只需要在整数输入之间留出空格即可。它将正常扫描阵列。

评论

1赞 hackinghorn 11/30/2022
这是正确的!只需放入并测试即可cin >> arr[i];
0赞 RiverX15 11/30/2022
啊,是的,它工作得很好!我认为将换行符作为每个输入的默认分隔符,并认为存在一些替代方案可以将其更改为空格。cin
0赞 john 11/30/2022
cin是一个流,没有分隔符的概念。输入运算符和函数可能(也可能不)定义分隔符。
0赞 Lasersköld 11/30/2022 #2

您可能希望将数组替换为 a 以使其在运行时可调整大小。如果您确实像您的示例中那样,程序将不会编译,因为不知道程序何时构建。std::vectorn

这是一个简单的例子

#include <iostream>
#include <vector>
#include <string>

using namespace std;

int main() {
    int n = 0;
    cin >> n;
    vector<string> arr; // A vector (ie kind of a variable sized array)
    for (int i=0; i<n; i++) {
        string str;
        cin >> str; // Read a word
        arr.push_back(str); // Add a string to the vector
    }

    // To use the data
    for (int i = 0; i < arr.size(); ++i) {
        cout << arr.at(i) << "\n"; // Print value of vector
    }
    // or like this
    for (auto str: arr) {
        cout << str << "\n";
    }
}