При работе с ifstream данные в вызываемом файле не распечатываются

Вот мой код, цель — открыть файл, прочитать слова в этом файле и вести подсчет количества строк в файле. Моя проблема в том, что когда я запускаю свою программу и вызываю тестовый файл, только первая строка этого файла читается и печатается, я не совсем уверен, что с ней не так, любая помощь будет полезна.

вот что у меня в тестовом файле:

это &% file должен !!, …

ровно 7 слов


#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main(){

ifstream inputFile;
string fileName, inputRead;
string sentinel = "quit";
int count = 0;

cout<< "what file do you want to open?: ";
cin>> fileName;

inputFile.open(fileName);

while(!inputFile){
cout<< "\nError opening file." <<endl;

cout<< "Please enter filename correctly: ";
cin>> fileName;

inputFile.open(fileName);

}

while(fileName != sentinel){
if(inputFile){

inputFile >> inputRead;

count++;

cout<< endl;
cout<< fileName << " data" <<endl;
cout<< "*********************************\n" <<endl;

cout<< inputRead <<endl;

cout<< "\n*********************************" <<endl;
cout<< fileName << " has " << count << " words." <<endl;

cout<< "\nEnter another file name or type \"quit\" to end: ";
cin>> fileName;
}
}

inputFile.close();

cout<< endl;

}

-1

Решение

Проблема заключается в операторе if внутри цикла while. Если имя файла не совпадает с sentinel, вы проверяете, является ли inputFile допустимым. Если это так, вы выполняете строки кода внутри только один раз, прежде чем получить новое имя файла. То, что вы хотите, это что-то вроде этого:

while(fileName != sentinel){
cout<< endl;
cout<< fileName << " data" <<endl;
cout<< "*********************************\n" <<endl;
while(inputFile >> inputRead){

count++;cout<< inputRead <<endl;

}
cout<< "\n*********************************" <<endl;
cout<< fileName << " has " << count << " words." <<endl;

cout<< "\nEnter another file name or type \"quit\" to end: ";
cin>> fileName;
}
0

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

Других решений пока нет …

По вопросам рекламы [email protected]