数组的大小不确定

时间:2016-03-17 11:51:36

标签: 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;
}

1 个答案:

答案 0 :(得分:3)

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

此时我们不能再进一步了。一旦调用了未定义的行为,我们就无法再解释代码应该如何工作。如果您需要一个阵列,并且在运行时间之前不知道大小是多少,那么您应该使用std::vectorpush_back()