如何在int main中调用scanf(int argc,char * argv [])

时间:2017-07-05 18:20:13

标签: c

我正在尝试修改MercuryAPI SDK中的RFID阅读器代码。该程序假设通过从使用中获取一些参数并根据用户的输入打印一些消息来工作。但是,程序不允许我在main函数中声明新变量。

char c[1];
int main(int argc, char *argv[])
{
    //Code that already written from MercuryAPI SDK
    printf("\nEnter input: ");
    scanf("%c",c[0]);
    printf("\n%c", c[0]);
    if(*c == 'O'){
        printf("\nThe system is open");
    }
    else if(*c == 'X'){
        printf("\nThe system is unopen");
    }
}

所以,我试图将变量声明为全局外部主函数。

{{1}}

声明成功,但程序在输入参数后终止写入。对此有什么解决方案吗?

3 个答案:

答案 0 :(得分:0)

scanf("%c",c[0]);应为scanf("%c",c);

答案 1 :(得分:0)

%c的{​​{1}}格式说明符需要scanf的地址。您正在传递charc[0]。由于char是全局的,因此它的所有元素都使用值0进行初始化。这意味着您将NULL指针传递给c,然后尝试取消引用。这会调用undefined behavior

更改scanf来电,以传递scanf的地址。另外,将char更改为单个c而不是单个元素数组:

char

只要定义出现在任何其他语句之前,您也无法在char c; ... scanf("%c",&c); printf("\n%c", c); if(c == 'O'){ printf("\nThe system is open"); } else if(c == 'X'){ printf("\nThe system is unopen"); } 函数内定义c

答案 2 :(得分:-1)

替换

scanf("%c",c[0]);

scanf("%c",c);

同样在您的代码中,有时您使用c[0],有时使用*c

printf("\n%c", c[0]);
if(*c == 'O'){
    printf("\nThe system is open");
}
else if(*c == 'X'){
    printf("\nThe system is unopen");
}

我建议对此保持一致,例如,替换:

printf("\n%c", c[0]);

printf("\n%c", *c);