【问题标题】:possible assignment in condition (C)条件 (C) 中的可能分配
【发布时间】:2011-09-22 02:29:37
【问题描述】:

我要找的是数字“a”一个两位数的奇数。如果

#include <stdio.h>
main ()
{
    int a,k;
    int count=0;
    printf ("input number \n", a);
    scanf ("%d", &a);
    k = a % 2;
    while (a)
    {
        a /= 10;
        count ++;
    }
    if (k = 1 && count = 2)
        printf ("It is \n");
    else
        printf ("It is not \n");
    return (0);
}

【问题讨论】:

  • 不是 "lvalue required as left operand of assignment " error 的完全相同的副本,而是相同的第一天 CS-101 问题。
  • @Nick:在当前情况下,将要比较的文字作为左值可能是个好主意,即使用if ( 1 == k ) 而不是if ( k == 1 ),以防万一你错过输出一个“=”你会得到一个编译时错误。
  • 作为开始的习惯,始终使用正确的main 签名。应该是 int main(void)int main(int argc, char* argv[]) 或其他。
  • @another.anon.coward 或者,更好的是,只需使用 -Wall-Werror 标志进行编译,这两种语句都会产生编译错误。

标签: c gcc


【解决方案1】:

错误在这里:

if (k = 1 && count = 2)

你的意思可能是:

if (k == 1 && count == 2)

= 是一个分配。 == 是相等的比较。

另外,循环不是必需的。您可以通过检查它是否小于 100 并且大于或等于 10 来检查该数字是否为两位数。

【讨论】:

    【解决方案2】:

    GCC 对此抱怨:

    if (k = 1 && count = 2)
    

    相等运算符是一个双等号:==。您使用的单等号= 是赋值运算符。

    您将k 设置为1 并将count 设置为2,并且if 将始终被执行。

    您收到的信息旨在帮助人们快速准确地发现这个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-18
      • 2014-08-26
      • 2023-03-28
      • 2011-06-01
      • 2010-09-10
      • 1970-01-01
      • 2021-03-23
      • 2011-04-13
      相关资源
      最近更新 更多