Код должен подсчитывать количество символов a, b, c, d, e и f во входном текстовом файле и выводить вывод во второй текстовый файл. Когда я запускаю код, он создает выходной файл, но ничего не записывает в него.
#include<iostream>
#include<fstream>
#include<cmath>
using namespace std;int main(){
// establish counters for the number of each character
char x;
int acount=0;
int bcount=0;
int ccount=0;
int dcount=0;
int ecount=0;
int fcount=0;
ifstream iFile("plato.txt"); //define & open files
ofstream oFile("statistics.txt");
if(!iFile){
cout<<"The file could not be opened.";
exit(1);
}
if(!oFile){
cout<<"The file could not be opened.";
exit(1);
}
iFile>>x;
while(!iFile.eof()){
if(x=='a'||x=='A'){
acount++;
}
else if(x=='b'||x=='B'){
bcount++;
}
else if(x=='c'||x=='C'){
ccount++;
}
else if(x=='d'||x=='D'){
dcount++;
}
else if(x=='d'||x=='D'){
dcount++;
}
else if(x=='f'||x=='F'){
fcount++;
}
}oFile<<"Number of a/A characters: "<<acount; //write number of characters into statistics file
oFile<<"\nNumber of b/B characters: "<<bcount;
oFile<<"\nNumber of c/C characters: "<<ccount;
oFile<<"\nNumber of d/D characters: "<<dcount;
oFile<<"\nNumber of e/E characters: "<<ecount;
oFile<<"\nNumber of f/F characters: "<<fcount;//close files
iFile.close();
oFile.close();
}
У вас есть бесконечный цикл; Вы ничего не делаете в цикле, который изменил бы состояние ifile.eof()
, И, конечно же, условие для начала неверное — вы никогда не захотите использовать ios_base::eof()
как условие в цикле. Ваш цикл, вероятно, должен быть:
while ( iFile >> x ) {
, хотя для чтения отдельных символов, может быть проще использовать get
,
Вставьте следующую строку внутри оператора while (в конце):
iFile>>x;
Раньше вы сканировали только первое значение x, поэтому цикл while продолжался бесконечно.