启动程序,您需要输入所需的元素数量,例如,如果选择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();
}
答案 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