【发布时间】:2016-01-01 13:33:10
【问题描述】:
我想从文件中读取一些值并返回它们的代码。例如,如果我在文件中有“if(x=3)”,则输出将是这样的:
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);
}
这里是SCAN函数
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;
}
我已经发布了我的代码摘要,以便于阅读,其中包含字母数字空格(只是忽略空格)和“(”的循环。
【问题讨论】:
-
是的,考虑了所有模式,但我没有复制它们,因为帖子没有太长
-
不要在
SCAN函数中打开文件:每次都会从头开始读取。您需要在解析之前打开它,并将流的引用引用到各种函数。 -
有什么方法可以在不改变主程序的情况下做到这一点?
-
@Payf1 你的意思是,有没有办法在不改变代码的情况下修复你的错误?没有。
-
感谢您的回复巴里。我确实想解决这个问题,但我想知道是否有任何方法可以在不更改主要功能的情况下解决它。我的意思是只修改 SCAN 函数。
标签: c++ function file infinite-loop