3
我想從文件中讀取一些值並返回它們的代碼。例如,如果我有「如果(X = 3)」的文件中,則輸出將是這樣的:C++ - 讀取文件字符時的無限循環
22 if 12 ( 2 x 11 = 1 3 13 )
在左側的每個數字是在右側的值,例如一個代碼對於標識符(這裏是X),它是2等等。
問題是,當我打開函數SCAN中的「test.txt」文件並找到代碼時,它會返回它,並將等效字符顯示在輸出中。但從那時起,它會進入無限循環,因爲之前返回的字符無法更改。所以它返回了「22 if」的無限輸出。
int main() {
int Code;
string Str;
do
{
Code=SCAN(Str);
cout<<Code<<"\t"<<Str<< endl;
}
while(Code !=0);
}
,這裏是掃描功能
int SCAN(string& String){
int Code;
ifstream ifs;
ifs.open ("test.txt", ifstream::in);
char c = ifs.get();
String=c;
while (ifs.good()) {
if (isspace(c)){
c = ifs.get();
}
if (isalpha(c)){
string temp;
while(isalpha(c)){
temp.push_back(c);
c = ifs.get();
}
String = temp;
return 2;
}
if(isdigit(c)){
string temp;
while(isdigit(c)){
temp.push_back(c);
c = ifs.get();
}
String=temp;
return 1;
}
if(c=='('){
c = ifs.get();
return 12;
}
c = ifs.get();
}//endwhile
ifs.close();
return 0;
}
我已經發布了我的代碼總結易於閱讀其中包含字母數字空間(只是忽略空格)和環「(」 。
是有考慮所有的模式,但我沒有複製他們,因爲崗位沒有得到過久 – Payf1
不要在'SCAN'功能打開文件:它將從每次啓動時讀取。您需要在解析之前將其打開,並引用流到各種函數的流。 –
有沒有辦法做到這一點,而無需更改主程序? – Payf1