Hi all,
I have little problem when reading a file char by char and when i tried to make a check at the end of file. I am making a check through '\n' but its not working. Please have a look in the following Program and let me know yours suggestion. The following Program removes comments from a C++ file. The logic of this program is taken from state machine diagram.
#include<iostream>
#include<fstream>
using namespace std;
class stateMachine{
public:
stateMachine();
~stateMachine();
void process_input();
private:
enum StateNames { A = 1, B, C, D, E};
int currState;
ifstream orgnl;
ofstream bakup;
};
stateMachine::stateMachine(){
orgnl.open("exp1.cpp");
bakup.open("exp2.cpp");
currState = A;
}
stateMachine::~stateMachine(){
orgnl.close();
bakup.close();
}
void stateMachine::process_input(){
char ch;
while(!orgnl.eof()){
orgnl >> ch;
switch(currState){
case A: {
if (ch == '/' || ch == '*')
currState = B;
break;
}
case B: {
if(ch == '/')
currState = C;
else if(ch == '*')
currState = D;
else
currState = A;
break;
}
case C: {
cout<<"Char is : "<<ch<<"\tand Current state is : "<<currState<<endl;
if(ch == '\n')
currState = A;
break;
}
case D: {
if(ch == '*')
currState = E;
break;
}
case E: {
if(ch == '/')
currState = A;
else
currState = D;
break;
}
}
if(currState == A)
bakup << ch;
}
}
int main(){
stateMachine sm;
sm.process_input();
system("pause");
return 0;
}
exp1.cpp file contais:
#include<iostream>
using namespace std;
int main(){
char ch; //char
/*inputting char and int*/
return 0;
}
The output of above program is (i have putted cout in state C):
Char is : c and Current state is : 3
Char is : h and Current state is : 3
Char is : a and Current state is : 3
Char is : r and Current state is : 3
Char is : / and Current state is : 3
Char is : * and Current state is : 3
Char is : i and Current state is : 3
Char is : n and Current state is : 3
Char is : p and Current state is : 3
Char is : u and Current state is : 3
Char is : t and Current state is : 3
Char is : t and Current state is : 3
Char is : i and Current state is : 3
Char is : n and Current state is : 3
Char is : g and Current state is : 3
Char is : c and Current state is : 3
Char is : h and Current state is : 3
Char is : a and Current state is : 3
Char is : r and Current state is : 3
Char is : a and Current state is : 3
Char is : n and Current state is : 3
Char is : d and Current state is : 3
Char is : i and Current state is : 3
Char is : n and Current state is : 3
Char is : t and Current state is : 3
Char is : * and Current state is : 3
Char is : / and Current state is : 3
Char is : r and Current state is : 3
Char is : e and Current state is : 3
Char is : t and Current state is : 3
Char is : u and Current state is : 3
Char is : r and Current state is : 3
Char is : n and Current state is : 3
Char is : 0 and Current state is : 3
Char is : ; and Current state is : 3
Char is : } and Current state is : 3
Char is : } and Current state is : 3
Press any key to continue . . .
Which indicates program is stuck on state 'C'. Why Program is not getting identify '\n' as eol. What could be the right solution to make this program work.