fileoutputstream — C ++ Вывод мусора

это вызывает у меня злую головную боль, и я надеялся, что смогу помочь. Предполагается, что программа читает в программе 19 целых чисел, а затем выводит наименьшее (2-е целое) и наибольшее (5-е целое) на экран. Однако все мои результаты дают мусор.

#include iostream>
#include <fstream>
#include <cstdlib>

using std::ifstream;
using std::ofstream;
using std::cout;
using std::endl;

//the goal of this program is to read in numbers from a file, then output the
//highest number and the lowest number to the screen
int main() {

ifstream fileInput;
int nOne, nTwo, nThree, nFour, nFive, nSix, nSeven, nEight, nNine, nTen,     //there are 19 numbers in the file
nEleven, nTwelve, nThirteen, nFourteen, nFifteen, nSixteen, nSeventeen,
nEighteen, nNineteen;cout << "Opening File" << endl;

fileInput.open("Lab12A.txt");            //the file is opened
if (fileInput.fail())
{
cout << "Input file opening failed. \n"; //the fail check doesnt pop up, so the file has been opened.
exit(1);
}

fileInput >> nOne >> nTwo >> nThree >> nFour >> nFive >> nSix >> nSeven >> nEight
>> nNine >> nTen >> nEleven >> nTwelve >> nThirteen >> nFourteen >> nFifteen   //this is where they should be extracted
>> nSixteen >> nSeventeen >> nEighteen >> nNineteen;cout << "The highest number is " << nTwo << endl;
cout << "The lowest number is " << nFive << endl;

fileInput.close();

system("pause");
return 0;
}

1

Решение

Я хотел добавить только комментарий, но так как я не могу этого сделать, я оставляю это как ответ.

Я скопировал ваш файл и создал текстовый файл, чтобы попытаться воспроизвести вашу проблему. Сначала все прошло хорошо (вообще никаких проблем). Но с комментариями от Даниэль Шеплер, Я изменил кодировку файла на UTF8-BOM (Вы можете легко сделать это из меню Кодировка Notepad ++) и попробовать еще раз. Я получил те же значения, которые вы опубликовали. Я не могу дать больше объяснений, как именно следует толковать ценности, но я хочу, чтобы кто-то с большим опытом просветил нас здесь.

1

Другие решения

Во-первых, я хотел бы поблагодарить всех, кто смотрел и комментировал это, я очень ценю это, проблема была в конечном итоге связана с необходимостью полного пути к файлу .txt, а не относительного пути, который я первоначально разместил. По какой-то причине мой компилятор не смог распознать файл без него. Похоже, глупая ошибка, но я относительно новичок в этом, так что они наверняка пискнут. Еще раз спасибо всем!

1

Вы можете использовать класс std::vector нажимаем значения, затем сортируем контейнер и, наконец, печатаем второй и пятый элементы:

#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>int main(){

std::ifstream in("test.txt");

std::vector<int> vecInt;
int value;

while(in >> value)
vecInt.push_back(value);
in.close();

std::sort(vecInt.begin(), vecInt.end());

// second value is at index 1 and fifth value is at index 4
for(auto i(0); i != vecInt.size(); ++i)
if(i == 1 || i == 4)
std::cout << vecInt[i] << std::endl;std::cout << std::endl << std::endl;
return 0;
}
  • Я не уверен, что вы имеете в виду под «наибольшим пятым целым числом».
0
По вопросам рекламы [email protected]