我对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);
}
编辑:该死的这是一个非常愚蠢的问题,在第二次作业中写了=而不是==。谢谢你的帮助!
答案 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;
}