每次我运行此方法时,它都会不断返回我的错误消息输出。例如:
用户输入:
display <table.txt> sortedby <ID>
这是我希望用户在调用显示函数时使用的正确语法。但是,当用户类型使用正确的语法显示时,它会输出我指定的错误消息。
Syntax error: display <intable> sortedby <col_name>
总的来说,我希望表格以漂亮的格式显示。但是它不会超越if语句。我想知道是否有我忽略的东西可能会返回我的error_message。
void display(Lexer lexer) {
Table table; // create a table from the created table class
vector<Token> tokvec = lexer.tokenize();
// expect [IDENT | STRING] sortedby IDENT
if (tokvec.size() != 4 ||
(tokvec[0].type != IDENT && tokvec[1].type != STRING) ||
tokvec[2].value != "sortedby" || tokvec[3].type != IDENT){
error_return("Syntax error: display <intable> sortedby <col_name>");
return;
}
string fn = tokvec[1].value; // name of the file
string col_name = tokvec[3].value;
table.set_input(fn);
table.scan_input();
table.set_index(col_name);
table.sort();
table.display();
}
最佳答案
我建议您打印出if语句中要比较的每个值。其中之一在为假时为真,因此您需要找出它为哪一个。完成此操作后,找出哪个值不应该是什么,然后将错误追溯到其来源。
像这样:
cout << tokvec.size() << " doesn't equal " << 4 << " - " << tokvec.size() != 4 << endl;
cout << tokvec[0].type << " doesn't equal " << IDENT << " - " << tokvec[0].type != IDENT << endl;
等等。
这将打印出所做出的每个语句,然后打印该语句是否为真。应该明确问题出在哪里。
关于c++ - 调试程序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13132331/