输入数组问题

时间:2017-04-04 11:25:20

标签: c++

启动程序,您需要输入所需的元素数量,例如,如果选择3,您可以键入b c但如果输入的元素超过3个,则程序会立即崩溃。 如果您输入的元素超过4个,那么它还没有弄清楚如何制作它只会读取a b c部分。

#pragma hdrstop
#pragma argsused

#include <string>
#include <tchar.h>
#include <conio.h>
#include <stdio.h>
#include <math.h>
#include <iostream.h>
#include <iomanip>
#include <sstream>


int main() {
    char teikums[100]; // Masiva lielums
    int c, i, count, patsk; // Patskani
    char yesno; // Atkartosanas Mainigais
    do {
        system("cls"); // Notira Ekranu
        patsk = 0; // Pieskir vertibu
        cout << "Ievadi Massiva lielumu 1-100: ";
        cin >> count;
        if (count > 100 || count < 1) {
            cout << "Massivs nedriklst but lielaks par 100 vai mazaks par 0";
        }
        else {
            cout << "Ievadi " << count << " burtus vienu pa vienam\n";
            for (i = 1; i <= count; i++) {

                cin >> teikums[i];
            }
            cout << "\nIzmantotie Patskani:";
            for (i = 0; teikums[i] != '\0'; i = i + 2) {
                if (teikums[i] == 'a' || teikums[i] == 'e' ||
                    teikums[i] == 'o' || teikums[i] == 'o' ||
                    teikums[i] == 'u' || teikums[i] == 'A' ||
                    teikums[i] == 'E' || teikums[i] == 'I' ||
                    teikums[i] == 'O' || teikums[i] == 'U') {
                    ++patsk;

                    cout << teikums[i];

                }

            }

            cout << "\nPatskanu Skaits: " << patsk;
        }
        cout << ("\nVai velaties atkartot(Y/cits):");
        // prasa lietotajam vai velas atkartot
        cin >> yesno;
        if (yesno == 'y' || yesno == 'Y') {
        }
        else {
            return 0;
        }
    }
    while (tolower(yesno) != 'n');
    getch();
}

1 个答案:

答案 0 :(得分:0)

如果您输入的数字超过count,则您的程序将无法按预期运行,因为它解析输入的方式。

for (i = 1; i <= count; i++) {

    cin >> teikums[i];
}

我们说count为1,您输入1 2。 这将循环一次并将teikum[1]称为1,并且2仍然是等待被输入流抓取的剩余部分。在你的下面,

 cin >> yesno;

现在将yesno设置为2,您的程序将因2 != 'n'而终止。您需要按照格式要求正确输入数据,或者使用cin之类的内容清除cin.ignore('\n'),这将忽略当前的输入行。

此外,您从1开始i并向上计数,但您的数组只有100。如果count为100,它将尝试访问teikum[100],这将超出范围你的数组从0到99