【发布时间】:2013-11-23 23:17:36
【问题描述】:
我刚刚让这个程序工作,但改变了一些东西,现在我的错误处理变得疯狂了。我几乎要把我的头撞到墙上,试图让它恢复原状,但无论我现在做什么,它都会吐出一个错误。
该程序应该使用命令行参数来定义行和列,并在此基础上创建一个动态二维数组。格式为“-rows (number) -columns (number)”。在提交作业之前,我尝试添加更多案例,但我必须在其他地方更改了一些逻辑,因为即使在我删除了新部分之后,无论我输入什么,它仍然无法正常工作。在这一点上,我想我只需要一双新鲜的眼睛来指引我正确的方向。
int main(int argc, char* argv[]) {
// Checks if the user input the correct number of arguments.
// If so, checks if they were input corecctly. If so, it assigns
// the user input values to rows/columns, and if not, prints
// an error message.
if(argc == 5) {
for(int i = 1; i < argc; i++) {
rows = getArg(argc, argv, i, compare1);
}
for(int i = 1; i < argc; i++) {
columns = getArg(argc, argv, i, compare2);
}
} else {
printError(argv);
}
这是main的相关部分。
以下是检查错误所涉及的功能。我实际上一直在研究的是 getArg,所以我假设这是逻辑失败的地方,但为了清楚起见,我包含了另一个必要的函数。
// Description: Checks if user input was valid
// Parameters: Command line arguments, int i from the for
// loop used to run this check on all command line arguments
// in main, and an array of chars used to compare the user's
// inputs to "-rows" or "-columns"
// Return value: If user input was valid, returns an int
// If not, exits program.
int getArg(int argc, char* argv[], int i, char compare[]) {
int arg;
if (strcmp(argv[i], compare) == 0) {
if (isInt((i + 1), argv)) {
arg = atoi(argv[i + 1]);
} else {
printError(argv);
}
} else {
printError(argv);
}
return arg;
}
// Description: Checks user input for valid integers
// Parameters: Command line arguments
// Return value: Returns true if input is an int;
// false if not.
bool isInt(int argc, char* argv[]) {
bool isInt;
for (int j = 0; j < strlen(argv[argc]); j++) { //For loop runs through each char in the array at argc
if (isdigit(argv[argc][j])) { // Checks to see if char is an integer
isInt = true;
return isInt;
} else {
isInt = false; // If there is ever a non-integer character, exit loop and return false
return isInt;
}
}
}
【问题讨论】:
-
"我刚刚让这个程序工作,但改变了一些东西,现在......我几乎把我的头撞到墙上,试图让它恢复原来的样子,但不管我现在所做的,它吐出一个错误。” - 听起来像是一个很好的源代码控制用例!
-
您是否尝试过使用调试器?还是打印调试信息来追踪问题出在哪里?
-
为什么不
boost::program_options?
标签: c++ command-line-arguments