条件(C)中可能的赋值

条件(C)中可能的赋值,c,gcc,C,Gcc,我要找出的是数字“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 &

我要找出的是数字“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);
}
#包括
主要()
{
int a,k;
整数计数=0;
printf(“输入编号\n”,a);
scanf(“%d”和“&a”);
k=a%2;
while(a)
{
a/=10;
计数++;
}
如果(k=1&&count=2)
printf(“它是\n”);
其他的
printf(“它不是\n”);
返回(0);
}
错误在这里:

if (k = 1 && count = 2)
你可能是说:

if (k == 1 && count == 2)
=
是一项作业<代码>=是相等的比较


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

GCC对此表示不满:

if (k = 1 && count = 2)
相等运算符是双等号:
==
。您使用的单等号是赋值运算符

您正在将
k
设置为1,将
count
设置为2,并且如果
if
将始终执行该


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

与CS-101问题的第一天不完全相同,但却是相同的问题。@Nick:最好将您要比较的文本作为左值,就像您当前的情况一样,即使用
if(1==k)
而不是
if(k==1)
,如果你漏掉了一个“=”,你会得到一个编译时错误。作为开始的习惯,总是为
main
使用正确的签名。它应该是
int-main(void)
int-main(int-argc,char*argv[])
或其他任何东西。@other.anon.coward,或者更好的是,只使用
-Wall
-Werror
标志编译,这两个语句都会产生编译错误。