我编写了一个程序,一次处理一个文本文件并提取相关信息。我的程序适用于某些文本文件,而不适用于其他文本文件。通过我的程序无缝运行的文件与不通过程序无缝运行的文件之间没有明显区别。
就问题文件而言:
然后它到达问题行并提供错误消息:
“调试断言失败的文件: F:/dd/vctools/crt_bld/self_x86/src/isctype.c 行:56 表达式:(无符号)(c + 1)< = 256“
当我进入调试器模式时,问题似乎来自我下面代码中的“while(tokenScanner)”循环。我提取了正在处理的问题行的内容,并将其与几个问题文件进行了比较,我发现在</li>
处弹出了断言失败消息,其中最后一个处理的令牌是“&gt;”。我不清楚为什么这是一个问题。原始文本文件中的此特定标记与<li
形式的</li><li
连续。因此,扫描仪在此字符串中途遇到问题。
有关为什么会这样,以及如何解决这个问题的任何想法?任何建议将不胜感激!
以下是我的代码的相关部分:
#include <string>
#include <iostream>
#include <fstream> //to get data from files
#include "filelib.h"
#include "console.h"
#include "tokenScanner.h"
#include "vector.h"
#include "ctype.h"
#include "math.h"
using namespace std;
/*Prototype Function*/
void evaluate(string expression);
Vector<string> myVectorOfTokens; //will store the tokens
Vector<string> myFileNames;
/*Main Program*/
int main() {
/*STEP1 : Creating a vector of the list of file names
to iterate over for processing*/
ifstream infile; //declaring variable to refer to file list
string catchFile = promptUserForFile(infile, "Input file:");
string line; //corresponds to the lines in the master file containing the list files
while(getline(infile, line)){
myFileNames.add(line);
}
/* STEP 2: Iterating over the file names contained in the vector*/
int countFileOpened=0; //keeps track of number of opened files
for (int i=1; i< myFileNames.size(); i++){
myVectorOfTokens.clear(); //resetting the vector of tokens for each new file
string fileName;
string line2;
ifstream inFile;
fileName= myFileNames[i];
inFile.open(fileName.c_str()); //open file convert c_str
if (inFile){
while(getline(inFile, line2)){
evaluate(line2);
}
}
inFile.close();
countFileOpened++;
}
return 0;
}
/*Function for Extracting the Biographer Name*/
void evaluate(string line){
/*Creating a Vector of Tokens From the Text*/
TokenScanner scanner(line); //the constructor
while (scanner.hasMoreTokens()){
string token=scanner.nextToken();
myVectorOfTokens.add(token);
}
}
答案 0 :(得分:1)
而(!inFile.eof()
是错误的(几乎在任何情况下)
while(getline(inFile, line2))
evaluate(line2);
更好