程序无法正确打印数据

时间:2014-04-06 15:35:48

标签: c

您好我有一个程序接受一些参数并打印出来的东西,问题该程序打印所有参数而不是那些需要打印的参数。如果你能告诉我我的错误以及如何解决它,我会很高兴谢谢。

代码 -

#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;
    }
}
}

3 个答案:

答案 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的内容来解析命令行。