При открытии файла, вы всегда должны проверить, имеет ли процесс открытия успеха , Я считаю, что file_name.good()
- идеальная булева функция для этого. Просто сделать простой, если заявление, чтобы увидеть, если он работает, как и что:
if(fin.good()) std::cout << "File opened!";
else{ //do something when opening didn't work }
Additioanlly, я полагаю, вы также должны написать «полное имя файла», который в этом случае (если имя файла является именно " Example.in ") будет" Example.in.txt ".
Для решения уникальных целых чисел есть пара решений: либо создайте std::vector
, который хранит уже прочитанные целые числа из файла, и каждый раз, когда вы пытаетесь прочитать другой, проверьте, было ли оно уже прочитано (самый быстрый алгоритм здесь был бы быстрым/heap/merge sort + двоичный поиск, а не итерация каждый раз). Всегда, когда добавляется новое целое число, увеличивайте значение count
на единицу.
Второе решение: просто сохранить целые числа в векторе и избавиться от кратных путем итерации и стирания. Тогда count
будет только your_vector.size()
.
«Печать каждого целого числа, начинающего новую строку», представляет собой сложную проблему. Я бы переключился с while(fin >> i)
на getline()
. Таким образом, у меня есть каждая строка файла в виде строки, которая может быть преобразована в строку целых чисел. С вашим циклом while()
вы не знаете, когда начинается новая строка, поэтому выполнить вторую задачу невозможно (или после задачи 1 вы можете снова открыть файл и использовать другой алгоритм только для получения первых целых чисел каждой строки)
Последнее: так много людей заявили, что использование отладчика настоятельно рекомендуется. Это избавило меня от размышлений о том, что не так, просто перейдя через код, построчно. Codeblocks предлагает действительно хороший отладчик, поэтому я рекомендую вам просто google руководство для отладчика кодовых блоков. Даже у YouTube есть некоторые учебные материалы, посвященные этому.
Пробовал ли вы использовать отладчик, чтобы узнать, что он на самом деле читает? –
Вы можете попробовать вставить элемент, который вы читаете, в [set] (http://www.cplusplus.com/reference/set/set/), который представляет собой контейнер, в котором хранятся уникальные элементы по определенному заказу. Затем вы читаете размер набора. – BugsFree
@ AlgirdasPreidžius Я новичок в этом. Я дважды проверял, но ничего не видел. Программные выходы - 0, что является начальным состоянием, что означает, что он, вероятно, даже не открыл файл, но - почему? – JasonM