【发布时间】:2022-01-13 17:59:03
【问题描述】:
我试图让我的程序在循环中一个一个地检查输入的命令行参数,以便它从一个操作移动到下一个操作。
int main(int argc,char* argv[])
{
int i = 1;
if(argc == 1)
{
printf("One argument expected.\n");
exit(EXIT_FAILURE);
}
createLog("log.txt");
if (strcmp(argv[i++], "create") == 0)
{
createFile();
}
else if (strcmp(argv[i++], "copy") == 0)
{
copyFile();
}
else if (strcmp(argv[i++], "delete") == 0)
{
deleteFile();
}
else if (strcmp(argv[i++], "show") == 0)
{
readFile();
}
else if (strcmp(argv[i++], "append") == 0)
{
appendLine();
}
else if (strcmp(argv[i++], "deleteLine") == 0)
{
deleteInsert(True); //The argument isDelete to check if we wanted to delete or insert
}
else if (strcmp(argv[i++], "insertLine") == 0)
{
deleteInsert(False); //The argument isDelete to check if we wanted to delete or insert
}
else if (strcmp(argv[i++], "showLine") == 0)
{
showLine();
}
else if (strcmp(argv[i++], "exit") == 0)
{
printf("Closing program");
exit(EXIT_SUCCESS);
}
else
{
printf("Please enter a valid argument");
}
}
我将其视为一个循环,i 每次检查时都会不断增加。我尝试在 if else 语句之前使用 infinte do while 循环,但它最终给了我一个分段错误。
我的程序还应该创建、读取、追加行、显示行、插入和删除行。有可能做我想做的事吗?还是我应该改变我的方法?
【问题讨论】:
-
你没有循环。您正在增加每个测试中的索引。因此,您要检查第一个参数是否为
create,然后检查第二个参数是否为copy,然后检查第三个参数是否为delete,依此类推。 -
是的,您可以使用循环。这样做很正常。但不要像你一样不断增加
i。 -
在将选项与所有可能的命令进行比较后,您只能增加
i。 -
i keeps on increasing every time it checks it,你知道它只检查一次吗?如果第一个if为真,则不会评估任何else if。 -
@Jabberwocky 问题是“我可以在循环中一一检查命令行参数吗?”。如果应用程序在单个命令行中有多个参数“创建副本删除”是有意义的,那就另当别论了。