输入int后的char的c ++输入数组

时间:2018-12-23 13:45:20

标签: c++

我有一个大小可变的字符数组,可从用户输入中接收。从那里,我根据大小输入带for循环的数组,但似乎保存大小的变量正在变化,并且陷入无限循环。

char arr_1[] = {};
int array_size;

cout << "Array size: ";
cin >> array_size;
for (int i = 0; i < array_size; i++)
{
  cout << "Input: ";
  cin >> arr_1[i];
}

3 个答案:

答案 0 :(得分:3)

  

我有一个大小可变的字符数组

char arr_1[] = {};

在C ++中,没有诸如“可变大小的数组”之类的东西。数组的大小永远不变。此外,非动态数组的大小必须是编译时间常数。您声明的数组大小为零。大小为零的非动态数组格式错误。

如果编译器由于某种原因未能发现该错误(也许它支持零长度数组作为语言扩展),那么最终您将无法访问该数组。超出范围访问数组的行为是不确定的。无限循环是不确定行为的一个例子。

但是有一个标准容器,当您向其中插入元素时,它会自动重新分配一个逐渐变大的数组:std::vector

尽管,由于您要处理字符,因此也许应该将它们表示为字符串。为此有一个特殊的容器:std::string

答案 1 :(得分:1)

为此,您必须使用std :: string:

#include <string>
#include <iostream>

int main()
{
    std::string input;

    std::getline(std::cin, input);
}

我们使用getline而不是cin <<,因为后者仅读取单词,而不读取整个字符串。

您甚至不需要询问用户阵列的大小;让标准库对此有所担心。

从中学到的教训是使用给您的工具,而不是尝试“自己动手”,因为这样做容易出错并且浪费时间。

还要注意,它是C,而不是C ++,它具有可变长度的数组。

答案 2 :(得分:1)

在这种情况下,Vector比数组更适合使用。甚至更容易使用字符串:

#include <iostream>
#include <string>

using namespace std;

int main()
{
    int numChars = 0;
    string word("");
    cout << "Num chars you want to input: ";
    cin >> numChars;

    for (int i = 0; i != numChars; ++i)
    {
        string input("");
        cout << "Enter a char: ";
        cin >> input;

        if (input.size() == 1)
            word += input;
        else
        {
            cout << "Invalid input- exiting";
            getchar();
            exit(0);
        }
    }

    cout << "Your word: " << word;
    getchar();
    getchar();
}