Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 24.08.2021
Сообщений: 1

Проверка на дурака при считывании данных из файла

24.08.2021, 13:16. Показов 1592. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Может кто-нибудь помочь, не могу никакую информацию найти в интернете, все форумы перелазил
Вопрос такой, как можно осуществить проверку на дурака при считывании данных из файла? Задача стоит считать из файла размерность массива и диапазон рандом чисел, дальше работать с этими значениями по поставленной задаче, обязательное условие чтобы данные вводились и считывались именно из файла. Допустим пользователь ввел отрицательно значение или ноль, буквы и т.п.
Можно ли сделать так чтобы программа не вылетала при некорректном вводе, а давала пользователю исправить значение в файле и продолжить работу
Не понимаю пока, это очень сложно реализовать стандартными операциями?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
#include <iostream>
#include <random>
#include <fstream>
 
using namespace std;
 
void genArray(unsigned int* arr, unsigned int size, unsigned int rndm) {
 
    srand(time(0));
 
    for (unsigned int i = 0; i < size; ++i) {
 
        arr[i] = rand() % (rndm + 1);
 
    }
 
}
 
void countElements(unsigned int* rndmArr, unsigned int size, unsigned int* cntrArr, unsigned int rndm) {
 
    for (unsigned int i = 0; i < rndm + 1; ++i) {
 
        for (unsigned int j = 0; j < size; ++j) {
 
            if (i == rndmArr[j]) {
 
                ++cntrArr[i];
 
            }
 
        }
 
    }
 
}
 
void printArray(unsigned int* arr, unsigned int size, ofstream& outputF) {
 
    for (unsigned int i = 0; i < size; ++i) {
 
        outputF << arr[i] << ' ';
 
    }
 
    outputF << endl;
 
}
 
void printCntrArray(unsigned int* cntrArr, unsigned int rndm, ofstream& outputF) {
 
    for (unsigned int i = 0; i < rndm + 1; ++i) {
 
        if (cntrArr[i] != 0) {
 
            outputF << "Element " << i << ": " << cntrArr[i] << endl;
 
        }
 
    }
 
    outputF << endl;
 
}
 
int main() {
 
    ifstream inputF("Input.txt");
 
    ofstream outputF("Output.txt");
 
    if (!inputF && !outputF)
 
    {
 
        cout << "File is not read" << endl;
 
        exit(0);
 
    }
 
    unsigned int rndm = 0;
 
    inputF >> rndm;
 
    unsigned int size = 0;
 
    inputF >> size;
 
    unsigned int* rndmArr = new unsigned int[size] {};
 
    unsigned int* cntrArr = new unsigned int[rndm + 1]{};
 
    genArray(rndmArr, size, rndm);
 
    countElements(rndmArr, size, cntrArr, rndm);
 
    outputF << "Generated array: " << endl;
 
    printArray(rndmArr, size, outputF);
 
    outputF << "Count of elements:" << endl;
 
    printCntrArray(cntrArr, rndm, outputF);
 
    delete[] rndmArr;
 
    delete[] cntrArr;
 
    inputF.close();
 
    outputF.close();
 
    system("pause");
 
    return 0;
 
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.08.2021, 13:16
Ответы с готовыми решениями:

Проверка правильности данных при считывании из файла
Вопрос, есть ли что-то подобное cin.bad, но для считывания из файла? Программа заполняет массив из текстового файла. Собственно, в коде все...

Нужна проверка содержимого ячейки Excel при считывании данных с использованием NPOI
Всем доброго времени суток! Пишу программу, которая считывает данных из таблицы Excel и записывает в базу данных MS SQL. Столкнулся с...

Ошибка при считывании данных с файла
Среда разработки Visual Studio 2008. Тип проэкта - консольное приложение. Проблема в следующем. Для считывания данных с файла...

2
 Аватар для YUEN HOIFEF
252 / 185 / 47
Регистрация: 31.01.2021
Сообщений: 934
24.08.2021, 16:07
Так нельзя. Файл заня другим процессом. Но если прямо из запущенной программы то можно вообще то seekg там и т.д.

Добавлено через 21 минуту
OpenFileToReadWrite,
iF CheckInput not. true rdToBuffer, truncateFile and add valid input. PutBu#er. Save_file_as_good();
0
Just Do It!
 Аватар для XLAT
4188 / 2643 / 654
Регистрация: 23.09.2014
Сообщений: 8,874
Записей в блоге: 3
25.08.2021, 15:08
Цитата Сообщение от Kiraiii Посмотреть сообщение
Проверка на дурака при считывании данных из файла
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
///----------------------------------------------------------------------------|
/// Защита от дурака...
/// ... в файле только неотрицательные вещественные числа
/// ... точное кол-во которых должно соответствовать первому числу файла.
///
/// Если выскакивает ошибка, то исправь файл(не забудь сохранить)
/// и жмакни ENTER...
///----------------------------------------------------------------------------:
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
 
int main()
{   std::cout << "Hello world!" << std::endl;
 
    ///-------------------|
    /// Массив для данных.|
    ///-------------------:
    std::vector<double>  m;
    {
        for(bool done = true; done;)
        {   m.clear();
            {
                std::string s;
                {   std::ifstream f("file.txt");
                    if(f.is_open()) std::getline(f, s, '\f');
                    else
                    {   std::cout << "ERROR: file open ...\n"; return -1;
                    }
                }
 
                {   size_t i = 0;
                    size_t N = 0;
                    try
                    {
                        {   double n = std::stod(s, &i);
                            if(n <= 0) throw(1);
                            N = size_t(n);
                        }
 
                        for(size_t ii = 0; i < s.size(); i += ii)
                        {   double n = std::stod(s.data()+i, &ii);
                            if(n < 0)  throw(2);
                            m.push_back(n);
                        }
                    }
                    catch(...)
                    {
                        if(N == m.size())
                        {   auto a = s.substr(i, s.size() - i);
                            if(a.find_first_not_of(" \n") == std::string::npos)
                            break;
                        }
 
                        std::cout   << "ERROR: read file ...\n"
                                    << "Correct file and PRESS ENTER!\n";
                        std::cin.get();
                        continue;
                    }
                }
            }
        }
    }
 
    std::cout << "It's good:\n"; for(const auto& d : m) std::cout << d << '\n';
 
    while(true) std::cin.get();
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.08.2021, 15:08
Помогаю со студенческими работами здесь

Преобразовать типы данных при считывании с ini файла
Считываю значение с ini файла и присваиваю переменной TestFile:=TIniFile.Create(ExtractFilePath(Application.ExeName)+'Settings.ini'); ...

При считывании данных из файла дописываются лишние симолы
Здравствуйте. Пишу класс для работы с файлами на базе winapi. Столкнулся с проблемой. Описываю свои действия. 1)Создаю файл 1.txt с...

Некорректность работы программы при считывании текстовых данных с файла
Здравствуйте!) Помогите, пожалуйста, решить данную проблему... Почему при следующем варианте кода, программа просто-напросто не...

Фиксация количества знаков после запятой при считывании данных из файла
Здравствуйте. Никак не могу понять, каким образом считать из файла чИсла с 9-ю знаками после запятой. Matlab по умолчанию ограничивается...

При считывании текста из файла, при нахождении пробела или enter ставится пробел
Помогите пожалуста вот код: read(fin,ch); if (ord(ch)=10) or (ord(ch)=13) then ch:=' '; {приводим символы перевода строки (0x0D,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru