您好我有一个程序接受一些参数并打印出来的东西,问题该程序打印所有参数而不是那些需要打印的参数。如果你能告诉我我的错误以及如何解决它,我会很高兴谢谢。
代码 -
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char** argv)
{
int i;
for(i = 0; i < argc ; i++)
{
if("/n")
{
printf("My name is pop\n");
break;
}
}
for(i = 0; i < argc ; i++)
{
if("/b")
{
printf("My birthday is 7.1.1999\n");
break;
}
}
for(i = 0; i < argc ; i++)
{
if("/f")
{
printf("My favorite food is pizza\n");
break;
}
}
for(i = 0; i < argc ; i++)
{
if("/?")
{
printf("/n = print name\n/b = print Birthday\n/f = Favorite Food\n");
break;
}
}
}
答案 0 :(得分:1)
可怕的误用C语法。 “这太糟糕了,甚至都没有错。”
if("/n")
以这种方式使用的常量字符串,检查'result'是否计算为0.它测试常量字符串的地址,嘿!它不是0!所以大括号内的代码会被执行。
查看您最喜欢的参考文献如何比较字符串。
此外,您可能希望跳过arg[0]
,因为它(通常)是您程序的名称。
答案 1 :(得分:1)
if("/b")
{
printf("My birthday is 7.1.1999\n");
break;
}
C中的任何非零都是真的。 "/b"
和其他值不为零。因此,您的if
条件为真。
答案 2 :(得分:0)
我认为你要找的是strcmp
。
if(strcmp(argv[i], "/b") == 0)
printf("My name is pop\n");
修改强>
for(i = 0; i < argc ; i++)
{
if(strcmp(argv[i], "/n") == 0)
{
printf("My name is pop\n");
continue;
}
if(strcmp(argv[i], "/b") == 0)
{
printf("My birthday is 7.1.1999\n");
continue;
}
//...etc
}
即使这样,你的方法也是非常规的。通常,您会希望使用类似getopts
的内容来解析命令行。