Кодирование новичка здесь. C ++ — мой первый язык. Пожалуйста, включите некоторые объяснения, если это возможно.
Я должен прочитать строки из файла, содержащего смешанные переменные. В настоящее время я сталкиваюсь с 2 проблемами:
Зацикливание входных операторов, чтобы я мог прочитать все строки. Я ограничен использованием следующего кода для выполнения цикла:
while(inputFile.peek() != EOF)
Я понимаю, что это должно проверить следующий символ, и если его EndOfFile он разорвет цикл, но я не могу заставить его работать.
Чтение строки, которой предшествует bool (пропуская пробел). Чтобы пропустить пробел, я должен использовать:
while(inputFile.peek() == ' ')
inputFile.get();
Содержимое файла:
Car CN 819481 maintenance false NONE
Car SLSF 46871 business true Memphis
Car AOK 156 tender true McAlester
Мой код ниже. Я опустил main()
функция как единственное, что он делает, это вызов input()
,
#include <iostream> //used in main()
#include <iomanip>
#include <string>
#include <fstream> //to work with file
#include <cstdlib> //for exit() function
using namespace std;
void input(){
ifstream inputFile;
string type, rMark, kind, destination;
int cNumber;
bool loaded;
inputFile.open("C:\\My Folder\\myFile.txt"); //open file
if (!inputFile){
cerr << "File failed to open.\n";
exit(1);
}
//read file contents
while(inputFile.peek() != EOF){
//initially I had >>destination in the statement below as well
//but that gave me the same results.
inputFile >> type >> rMark >> cNumber >> kind >> loaded;
//skip whitespace
while(inputFile.peek() == ' '){
inputFile.get();
}
//get final string
getline(inputFile, destination);
cout << type << " " << rMark << " " << cNumber << " " << kind << " ";
cout << boolalpha << loaded << " " << destination << endl;
}
inputFile.close(); //close file
} //end input()
После запуска программы я получаю:
Car CN 819481 maintenance false
Таким образом, первая строка читается до тех пор, пока значение bool (а последняя строка не будет опущена), и цикл не работает (или это так, но он читает то, что не должен?). Я пытался переместить .peek () и .gets (), но ни одна комбинация не сработала.
Заранее спасибо!
Вам нужно использовать std:boolalpha
в вашем выражении ввода, так же, как вы сделали для вывода:
inputFile >> type >> rMark >> cNumber >> kind >> boolalpha >> loaded;
В противном случае C ++ ожидает увидеть «0» или «1» при чтении логических переменных, а не «false» или «true».
Других решений пока нет …