argc / argv中的问题

时间:2017-03-19 16:10:19

标签: argv argc

我对C非常生疏,在尝试编译时我不断收到错误:“三个嵌套ifs中的每一个都需要左值作为赋值的左值”。 我很确定我正在做一些非常愚蠢和基本的错误,但我无法解决它!

此外代码非常幼稚,是否有更好的方法来检查argv中的各种字符串(它们必须是6个字符长,前2个字符必须是IC,FR或RG然后其他4个应该是数字代码)并打印正确的字符串?

int main(int argc, char *argv[]){
int i=1;

while(i < argc){
if(strlen(argv[i]) == 6){

if(argv[i][0] == 'I' && argv[i][1] = 'C' && argv[i][2] >= '0' && argv[i][2] <= '9' && argv[i][3] >= '0' && argv[i][3] <= '9' && argv[i][4] >= '0' && argv[i][4] <= '9' && argv[i][5] >= '0' && argv[i][5] <= '9'){
    printf("%s", argv[i]);
}

if(argv[i][0] == 'F' && argv[i][1] = 'R' && argv[i][2] >= 0 && argv[i][2]     <= 9 && argv[i][3] >= 0 && argv[i][3] <= 9 && argv[i][4] >= 0 && argv[i][4] <= 9 && argv[i][5] >= 0 && argv[i][5] <= 9){
    printf("%s", argv[i]);
}

if(argv[i][0] == 'R' && argv[i][1] = 'G' && argv[i][2] >= 0 && argv[i][2] <= 9 && argv[i][3] >= 0 && argv[i][3] <= 9 && argv[i][4] >= 0 && argv[i][4] <= 9 && argv[i][5] >= 0 && argv[i][5] <= 9){
    printf("%s", argv[i]);
}
}
i++;
}


return(0);
}
编辑:该死的这是一个非常愚蠢的问题,在第二次作业中写了=而不是==。谢谢你的帮助!

2 个答案:

答案 0 :(得分:1)

这是因为你在第二次测试中有一个拼写错误,如果写了=(赋值)而不是==(测试相等)。

答案 1 :(得分:0)

错误消息正确但不直观。编译器按如下方式解释您的代码(注意我插入的额外括号):

if(!empty($_POST["inRemarks"])) {
    $_inRemarks = array_unique($_POST["inRemarks"]); // <<<<<<<<<<
    foreach($_inRemarks as $inRemarks) if ($tmp++ < 2) {
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $inQty = array_unique($_POST['incQty']); // <<<<<<<<<<
// ......

这是因为&amp;&amp;比=更紧密地绑定。将=替换为==,您就可以了。

你应该写一个辅助函数:

if ((arg[0] == 'C' && arg[1]) = 'I') {}

然后你可以像这样使用它:

static bool parse_number(const char *arg, char ch1, char ch2, int *pnum) {
    if (arg[0] == ch1 && arg[1] == ch2 && '0' <= arg[2] && arg[2] <= '9') {
        char *end;
        unsigned long num = strtoul(arg + 2, &end, 10);
        if (*end == '\0' && end - arg == 6) {
            *pnum = (int)num;
            return true;
        }
    }
    return false;
}