Программа заполняет массив случайными числами, N - количество элементов массива, затем меняет местами каждую пару элементов. Необходимо проверить N на несколько параметров, проблема с проверкой введенного пользователем числа на целочисленность, тоесть проверка на тот случай, если пользователь введет с клавиатуры не целое число, например 2.2. Я в курсе, что long - целочисленное, но программа должна учитывать все вводы пользователя. #include <iostream> #include <stdlib.h> #include <ctime> #include <typeinfo> using namespace std; int main() { setlocale(LC_ALL, "Rus"); // для корректного вывода русского языка long N; // количество элементов массива float* pt; // используется для доступа к элементам массива A по адресу, а не по индексу srand(time(NULL)); cout << "введите четное количество символов "; cin >> N; // ввод числа if (typeid(N) != typeid(int)) { cout << "Количество элементов массива должно быть целым числом." << endl; return 1; } if (N == 0) { cout << "количество элементов массива не может быть равно нулю \n "; return 1; } else if (N < 0) { cout << "количество элементов массива не может быть отрацательным \n "; return 1; } else if (N % 2 != 0) { cout << "количество элементов массива должно быть четным \n "; return 1; } float* A = new float[N]; // оператор new для динамического выделения памяти под массив элементов типа float cout << "первоначальный массив \n"; for (int i = 0; i < N; i++) { A[i] = (float)rand() / RAND_MAX; // заполнение массива случайными числами cout << *(A + i) << endl; // вывод массива } pt = A; // присваивает указателю pt адрес начала массива A for (int i = 0; i < N; i += 2) // цикл с шагом 2, для того, чтобы поменять местами каждую пару в массиве { float perv = *(pt + i); // временная переменная, в которую сохраняется значение первого элемента массива из пары *(pt + i) = *(pt + i + 1); // первому элементу из двойки присваевается следующий элемент(меняет местами) *(pt + i + 1) = perv; // присваиваем втрому элементу из двойки значение первого } cout << "массив с условием \n"; for (int i = 0; i < N; i++) { cout << *(pt + i) << endl; // вывод массива с условием } C #include <iostream> #include <stdlib.h> #include <ctime> #include <typeinfo> using namespace std; int main() { setlocale(LC_ALL, "Rus"); // для корректного вывода русского языка long N; // количество элементов массива float* pt; // используется для доступа к элементам массива A по адресу, а не по индексу srand(time(NULL)); cout << "введите четное количество символов "; cin >> N; // ввод числа if (typeid(N) != typeid(int)) { cout << "Количество элементов массива должно быть целым числом." << endl; return 1; } if (N == 0) { cout << "количество элементов массива не может быть равно нулю \n "; return 1; } else if (N < 0) { cout << "количество элементов массива не может быть отрацательным \n "; return 1; } else if (N % 2 != 0) { cout << "количество элементов массива должно быть четным \n "; return 1; } float* A = new float[N]; // оператор new для динамического выделения памяти под массив элементов типа float cout << "первоначальный массив \n"; for (int i = 0; i < N; i++) { A[i] = (float)rand() / RAND_MAX; // заполнение массива случайными числами cout << *(A + i) << endl; // вывод массива } pt = A; // присваивает указателю pt адрес начала массива A for (int i = 0; i < N; i += 2) // цикл с шагом 2, для того, чтобы поменять местами каждую пару в массиве { float perv = *(pt + i); // временная переменная, в которую сохраняется значение первого элемента массива из пары *(pt + i) = *(pt + i + 1); // первому элементу из двойки присваевается следующий элемент(меняет местами) *(pt + i + 1) = perv; // присваиваем втрому элементу из двойки значение первого } cout << "массив с условием \n"; for (int i = 0; i < N; i++) { cout << *(pt + i) << endl; // вывод массива с условием }
Считывай посимвольно, если ввели не цифру - посылай нахуй Также не забудь, что первый символ может быть минусом
Так тебе надо чтобы было еще число с плавающей точкой, там же можно сделать чтобы они и так и так считало
#include <iostream> #include <cstdlib> #include <ctime> #include <limits> using namespace std; int main() { setlocale(LC_ALL, "Rus"); long N; srand(static_cast<unsigned>(time(nullptr))); cout << "введите четное количество символов: "; while (true) { cin >> N; if (cin.fail()) { cin.clear(); // очищаем состояние ошибочного флага cin.ignore(numeric_limits<streamsize>::max(), '\n'); // очищаем поток cout << "Введите целое число: "; } else if (N <= 0) { cout << "Количество элементов массива должно быть положительным и не равно нулю. Попробуйте еще раз: "; } else if (N % 2 != 0) { cout << "Количество элементов массива должно быть четным. Попробуйте еще раз: "; } else { break; } } float* A = new float[N]; cout << "первоначальный массив:\n"; for (int i = 0; i < N; i++) { A[i] = static_cast<float>(rand()) / RAND_MAX; cout << A[i] << endl; } for (int i = 0; i < N; i += 2) { swap(A[i], A[i + 1]); } cout << "массив с условием:\n"; for (int i = 0; i < N; i++) { cout << A[i] << endl; } delete[] A; return 0; } C #include <iostream> #include <cstdlib> #include <ctime> #include <limits> using namespace std; int main() { setlocale(LC_ALL, "Rus"); long N; srand(static_cast<unsigned>(time(nullptr))); cout << "введите четное количество символов: "; while (true) { cin >> N; if (cin.fail()) { cin.clear(); // очищаем состояние ошибочного флага cin.ignore(numeric_limits<streamsize>::max(), '\n'); // очищаем поток cout << "Введите целое число: "; } else if (N <= 0) { cout << "Количество элементов массива должно быть положительным и не равно нулю. Попробуйте еще раз: "; } else if (N % 2 != 0) { cout << "Количество элементов массива должно быть четным. Попробуйте еще раз: "; } else { break; } } float* A = new float[N]; cout << "первоначальный массив:\n"; for (int i = 0; i < N; i++) { A[i] = static_cast<float>(rand()) / RAND_MAX; cout << A[i] << endl; } for (int i = 0; i < N; i += 2) { swap(A[i], A[i + 1]); } cout << "массив с условием:\n"; for (int i = 0; i < N; i++) { cout << A[i] << endl; } delete[] A; return 0; }
Yandex, 1. Использование cin.fail() для проверки, корректно ли было считано целое число. Если нет, то очищаем флаг ошибки cin.clear() и игнорируем оставшиеся символы в потоке ввода с помощью cin.ignore(). 2. Провел дополнительные проверки, чтобы убедиться, что число положительное, не равно нулю, и четное, прежде чем выйти из цикла. 3. Теперь программа просит пользователя повторить ввод, пока не получит корректное чётное целое число.