C/C++

Сравнение элементов массива типа char с символом типа char

Не понимаю в чем ошибка
программа не хочет сверять символы
скажите, пожалуйста, что я не так сделал?



#include <iostream>
using namespace std;
int main()
{
srand(NULL);
setlocale(LC_ALL, "rus");
int size;
cout << "enter size" << endl;
cin >> size;
char* array = new char[size];
int choose;
cout << "Выберите!!!!" << endl << "1. Авто-заполнение" << endl << "2. Ручками" << endl;
cin >> choose;
switch (choose)
{
case(1):
{
for (int i = 0; i < size; i++)
{
array[i] = rand() % 98 - 123;
}

}break;
case(2):
{
for (int i = 0; i < size; i++)
{
cin >> array[i];
}
}break;
default:
return 0;
break;
}
int proverka;
for (int i = 0; i < size; i++)
{
if (array[i] == 'a' || array[i] == 'i' || array[i] == 'o' || array[i] == 'u' || array[i] == 'e' || array[i] =='y')
{
cout << array[i] << endl;

}
}
delete[] array;
}
Между вводом числа (cin >> choose) и вводом символа (cin >> array[i]) необходимо очистить буфер ввода:
cin.ignore(42, '\n');
Возможно, это надо делать и между вводом символов.
Напиши, как должна работать программа, и что работает неправильно.
СС
Сени Суйом Сени Суйом
58 065
Лучший ответ
Николай Джима нашел ошибку уже - в цикле авто заполнения массива в case 1

только вопрос
а как сделать нормальное заполнение по символам??
Николай Джима посмотри, пожалуйста, у меня в switch, в case 1 - заполнение через for
всем ячейкам массива должен "даваться" случайный символ алфавита (по очереди)
но вместо этого цикл заполняет массив чем-то другим, я неправильно указал строчку

array[i] = rand() % (98 - 122);

вот как ее указать, чтобы массив заполнялся буками английского алфавита
#include <iostream>
#define RAND(min, max) (rand() % ((max) - (min)) + (min))
using namespace std;
void clear(istream& inp = cin) {
inp.clear();
inp.ignore(inp.rdbuf()->in_avail());
}
bool exist(char* box, const size_t length) {
if (box == nullptr && length == 0) {
puts("Массив имеет нулевой размер или не существует!");
return false;
}
return true;
}
size_t integer(const char* msg) {
size_t value = 0;
while (!value) {
cout << msg;
cin >> value;
clear();
}
return value;
}
void random_fill(char* box, const size_t length) {
if (!exist(box, length));
else {
for (auto i = 0U; i < length; ++i) {
box[i] = RAND('a', 'z' + 1);
}
}
cout << "Случайные символы: " << box << '\n';
}
void hands_fill(char* box, const size_t length) {
if (!exist(box, length));
else {
cout << "Введите символьный массив: ";
cin.getline(box, length);
clear();
}
}
void vowel_search(char* box, const size_t length) {
if (!exist(box, length));
else {
const char* vowel = "aeiouy";
auto i = 0U;
cout << "Гласные буквы: ";
while (box[i]) {
auto j = 0U;
while (vowel[j]) {
if (vowel[j] == box[i]) cout.put(box[i]) << ' ';
++j;
}
++i;
}
puts("");
}
}
int main() {
srand(unsigned(time(nullptr)));
system("chcp 1251 > nul");
while (true) {
auto length = integer("Введите размер массива: ");
auto box = new(nothrow) char[length];
if (box != nullptr) {
cout << "1. Автозаполнение\n2. Ручками\n";
auto choose = integer("Выберите: ");
switch (choose) {
case 1: random_fill(box, length); break;
case 2: hands_fill(box, length); break;
default: delete[] box; return 0;
}
vowel_search(box, length);
delete[] box;
}
puts("");
}
}
А что именно происходит не как хотелось? Навскидку, в одном месте есть return 0, в другом - без возвращаемого значения
Ivan Maksymiv
Ivan Maksymiv
56 532
Николай Джима нашел ошибку уже - в цикле авто заполнения массива в case 1

только вопрос
а как сделать нормальное заполнение по символам??
Попробуй поменять case 2 так:
...
case 2:
scanf("%s", array); break;

Не нужно вводить посимвольно в цикле.
Сразу вводи весь массив символов одной строкой.
Петров Максим
Петров Максим
37 945
можно на русском