Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <iomanip>
- #include <string>
- #include <sstream>
- #include <Windows.h>
- using namespace std;
- int main()
- {
- SetConsoleCP(1251);
- SetConsoleOutputCP(1251);
- ifstream file;
- int* C;
- int amount;
- do
- {
- amount = 0;
- string name;
- cout << "Введите имя файла с массивом или \"*\", чтобы выйти из программы: ";
- getline(cin, name); //ввод имени файла
- if (name == "*")
- return 0;
- /////////////обработка ошибки вне цикла!///////////////
- file.open(name);
- if (!file.is_open())
- {
- cout << "Не удалось открыть файл \"" << name << "\"!\nКод ошибки:" << errno << " ";
- perror("");
- continue;
- }
- ///////////////////указать второй способ определения кол-ва чисел в файле/////////////////////
- //проверка файла на наличие массива
- /*string er;
- streampos p;
- bool isError = false;
- amount = 0;
- while (!(file>> ws).eof()) {
- int e;
- p = file.tellg();
- data >> e;
- char k;
- if (data.fail() || ((k = file.peek()) != ' ' && k != '\n' && k != '\t' && k != EOF)) {
- isError = true;
- file.clear();
- file.seekg(problemPos);
- file >> er;
- break;
- }
- amount++;
- }
- if (isError) {
- file.close();
- cout << "\nОшибка ввода элемента \"" << er << "\" под номером: " << amount + 1
- << ", начинающегося с позиции указателя \"" << 1 + p << "\"!\n\n";
- er = "";
- system("pause");
- continue;
- }
- if (amount == 0) {
- file.close();
- str = "";
- cout << "\n\nФайл: \"" << fileName << "\" не содержит целых чисел.\n\n";
- system("pause");
- continue;
- }
- er = ""; */
- streampos p;
- stringstream er;
- string str;
- int b;
- bool isError = false;
- amount = 0;
- while (!(file >> str).fail()) {
- p = file.tellg();
- er.str(str);
- er >> b;
- if (!er.eof() || er.fail()) {
- isError = true;
- break;
- }
- er.clear();
- amount++;
- }
- if (isError) {
- file.close();
- cout << "\nОшибка ввода элемента \"" << str << "\" под номером: " << amount + 1
- << ", начинающегося с позиции указателя \"" << 1 + p - str.length() << "\"!\n\n";
- str = "";
- er.str("");
- system("pause");
- continue;
- }
- if (amount == 0) {
- file.close();
- str = "";
- er.str("");
- cout << "\n\nФайл: \"" << name << "\" не содержит целых чисел.\n\n";
- system("pause");
- continue;
- }
- str = "";
- er.str("");
- try//динамическое выделение памяти (ошибка выделения памяти) //первый способ
- {
- C = new int[amount];
- }
- catch (...)
- {
- file.close();
- cout << "Ошибка выделения динамической памяти\n";
- continue;
- }
- int* D = new (nothrow) int[amount]; //второй способ
- if (!D) {
- delete[]C;
- file.close();
- system("cls");
- cout << "Ошибка выделения памяти!\n\n";
- system("pause");
- continue;
- }
- //вывод массива на экран из файла
- cout << setw(10) << "Массив С\n";
- cout << setw(10) << "Номер";
- for (int i = 1; i <= amount; i++)
- cout << setw(4) << i;
- cout << endl << setw(10) << "Элемент";
- file.clear();
- file.seekg(0);
- for (int i = 0; i < amount; i++) {
- file >> C[i];
- cout << setw(4) << C[i];
- }
- file.close();
- cout << endl << endl;
- //обработка массива, запись в новый массив
- int zeroElements = 0;
- for (int i = 0; i < amount; i++) {
- D[i] = C[i];
- if (C[i] == 0)
- zeroElements++;
- }
- zeroElements -= 1;
- int i = 0;
- bool isZero = false;
- while (zeroElements > 0) {
- if (D[i] == 0 && isZero) {
- zeroElements--;
- isZero = false;
- } else
- if (isZero)
- D[i] = 1;
- if (D[i] == 0) {
- isZero = true;
- i++;
- continue;
- }
- if (isZero)
- D[i] = 1;
- i++;
- }
- delete[] C;
- //вывод нового массива
- cout << setw(10) << "Новый массив D\n";
- cout << setw(10) << "Номер";
- for (int i = 1; i <= amount; i++)
- cout << setw(4) << i;
- cout << endl << setw(10) << "Элемент";
- for (int i = 0; i < amount; i++)
- cout << setw(4) << D[i];
- delete[] D;
- cout << endl << endl;
- } while (true);
- }
Advertisement
Add Comment
Please, Sign In to add comment