c++ - 数组大小不定

标签 c++ arrays

<分区>

我试图制作一个简单的程序来计算用户名中元音和辅音的数量。数组的大小取决于用户名有多少个字母。我正在使用队列来显示字母。每当我运行该程序时,.Exe 文件就会崩溃。所以我尝试将数组大小更改为数字而不是变量并且它起作用了。我认为问题在于使用变量作为数组的大小。无论如何要修复它?这样我仍然可以为我的数组大小使用一个变量。这是我的代码

#include <iostream>
#include <queue>

using namespace std;

int main()
{
    int i;
    char bin[i];
    queue<char> name;
    int v = 0, c = 0;

    cout << "how many letters does your name have?:";
    cin >> i;
    cout << "Enter the letters of your name one by one:\n";

    do {
        for (int k = 0; k < i; k++) {
            cout << " ";
            cin >> bin[k];
            name.push(bin[k]);

            if (bin[k] == 'a' || bin[k] == 'A') {
                v++;
            }
            if (bin[k] == 'e' || bin[k] == 'E') {
                v++;
            }
            if (bin[k] == 'i' || bin[k] == 'I') {
                v++;
            }
            if (bin[k] == 'o' || bin[k] == 'O') {
                v++;
            }
            if (bin[k] == 'u' || bin[k] == 'U') {
                v++;
            }
            if (bin[k] == 'b' || bin[k] == 'B') {
                c++;
            }
            if (bin[k] == 'c' || bin[k] == 'C') {
                c++;
            }
            if (bin[k] == 'i' || bin[k] == 'D') {
                c++;
            }
            if (bin[k] == 'f' || bin[k] == 'F') {
                c++;
            }
            if (bin[k] == 'g' || bin[k] == 'G') {
                c++;
            }
            if (bin[k] == 'h' || bin[k] == 'H') {
                c++;
            }
            if (bin[k] == 'j' || bin[k] == 'J') {
                c++;
            }
            if (bin[k] == 'k' || bin[k] == 'K') {
                v++;
            }
            if (bin[k] == 'l' || bin[k] == 'L') {
                v++;
            }
            if (bin[k] == 'm' || bin[k] == 'M') {
                c++;
            }
            if (bin[k] == 'n' || bin[k] == 'N') {
                c++;
            }
            if (bin[k] == 'P' || bin[k] == 'p') {
                c++;
            }
            if (bin[k] == 'q' || bin[k] == 'Q') {
                c++;
            }
            if (bin[k] == 'r' || bin[k] == 'R') {
                c++;
            }
            if (bin[k] == 's' || bin[k] == 'S') {
                c++;
            }
            if (bin[k] == 't' || bin[k] == 'T') {
                c++;
            }
            if (bin[k] == 'v' || bin[k] == 'V') {
                c++;
            }
            if (bin[k] == 'w' || bin[k] == 'W') {
                c++;
            }
            if (bin[k] == 'x' || bin[k] == 'X') {
                c++;
            }
            if (bin[k] == 'y' || bin[k] == 'Y') {
                c++;
            }
            if (bin[k] == 'z' || bin[k] == 'Z') {
                c++;
            }
        }
    } while (bin[100] != '1');

    cout << "\n\nYour name is:\n";
    for (queue<char> run = name; !run.empty(); run.pop()) {
        cout << " " << run.front() << endl;
    }
    cout << "\nVowels= " << v;
    cout << "\nConsonants= " << c << "\n";

    cout << "\n\n\n\n";

    system("PAUSE");
    return 0;
}

最佳答案

您的代码有未定义的行为。 int i; 创建一个名为 i 的未初始化的 int。然后在 char bin[i]; 中使用未初始化的垃圾变量。所以现在我们有一个未定义大小的数组。

此时我们不能再进一步了。一旦调用了未定义的行为,我们就无法再推断代码应该如何工作。如果您需要一个数组并且直到运行时才知道大小是多少,那么您应该使用 std::vectorpush_back()

关于c++ - 数组大小不定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36059774/

相关文章:

c++ - 为什么无法访问基类的函数重载

c++ - 如何选择 remove_reference 的特化

c++ - 按引用数组值交换

c++ - 为什么这个静态成员即使存在也没有构造?

javascript - 寻址 JSON 数组中的对象

javascript - 改变JavaScript中对象的结构

c++ - 编译器编译一个 'io_service_' 变量显示为 : cannot appear in a constant-expression

java - 如何将包含所需参数的列表传递给函数

java - 如何让我的按钮单击显示与我的随机 TextView 相对应的 ImageView?

sql - Postgresql 迭代数组字段并将记录用于另一个查询