Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 是不是;是“linux”吗;变量有特殊意义吗?_C_Variables - Fatal编程技术网

C 是不是;是“linux”吗;变量有特殊意义吗?

C 是不是;是“linux”吗;变量有特殊意义吗?,c,variables,C,Variables,我不明白为什么下面的if语句的结果总是不正确: unsigned long is_linux; printf("plz. enter a digit : "); gets(str); sscanf(str,"%d",&is_linux); printf("the value of is_linux = %d \n",is_linux); if(is_linux==1) printf("Here is 1 ! \n"); else printf("There is 0

我不明白为什么下面的
if
语句的结果总是不正确:

unsigned long is_linux;
printf("plz. enter a digit : ");

gets(str);
sscanf(str,"%d",&is_linux);

printf("the value of is_linux = %d \n",is_linux);
if(is_linux==1)
    printf("Here is 1 ! \n");
else
    printf("There is 0 ! \n");
即使输入了“1”,我也只能得到“There is 0!”语句。此外,
printf()
语句正确显示了
is\u linux
(1)的值:

如果我将变量更改为另一个名称,例如,
test
,则效果良好。是否有任何理由不使用
Is\u linux
variable?我在您的代码中使用了x86_64-redhat-linux上的
gcc
编译了上述源代码

  sscanf(str,"%d",&is_linux);
原因

is_linux
的类型为
无符号长
,它要求转换说明符为
lu

将错误(不匹配)类型的参数传递给任何转换说明符都会导致错误。

在代码中

  sscanf(str,"%d",&is_linux);
原因

is_linux
的类型为
无符号长
,它要求转换说明符为
lu


将错误(不匹配)类型的参数传递给任何转换说明符都会导致错误。

否。您应该能够使用变量名
is_linux
不是保留的,也不是关键字。在最坏的情况下,它可能(但不应该)是一个宏(
linux
通常是,很不幸)。先发制人,或者如果由于它是平台上的宏而导致编译错误,您可以
#undef
首先将其删除。
(确保其余代码正确。)

否。您应该能够使用变量名
is_linux
不是保留的,也不是关键字。在最坏的情况下,它可能(但不应该)是一个宏(
linux
通常是,很不幸)。先发制人,或者如果由于它是平台上的宏而导致编译错误,您可以
#undef
首先将其删除。
(确保代码的其余部分正确。)

您分配给的数据类型与linux不兼容。您将其设置为long,但给它一个int,因此当您使用if语句检查时,您检查的是long值,而不是int。

您分配给的数据类型是不兼容的。您将其设置为long,但给它一个int,因此当您使用if语句检查时,您是在检查long值,而不是int。

非常感谢您,在这里。 所有的评论都对我找到根本原因很有帮助。 事实上,原因很简单,数据类型。 简单地说,我在sscanf和printf中将%d改为%lu,得到了正确的答案

我的机器是64位的lunux系统,它将无符号长度视为8字节单位。 此外,我还误解了%d可能涵盖所有整数数据类型。 无论如何,我非常感谢你们的评论。谢谢:)

非常感谢,谢谢。 所有的评论都对我找到根本原因很有帮助。 事实上,原因很简单,数据类型。 简单地说,我在sscanf和printf中将%d改为%lu,得到了正确的答案

我的机器是64位的lunux系统,它将无符号长度视为8字节单位。 此外,我还误解了%d可能涵盖所有整数数据类型。
无论如何,我非常感谢你们的评论。谢谢:)

请显示gets()是非标准的,使用
fgets()
。是
全局/静态变量还是自动变量?对于测试,请在定义中添加
static
。请注意
sscanf(“str、%d”和&is_-linux)
不正确。应使用
%lu
或指定了
l
长度修饰符的相关转换规范读取
无符号长代码>。在64位(非Windows)上机器,很可能您的扫描只设置了8字节整数中的4个字节;其他4个字节可能不为零,因此您的测试失败。为什么不打印
is_linux
-小心:
printf(“is_linux=%lu\n”,is_linux);
?最好使用
strtol
,而不是
ANFSCC
。请显示gets()如果是非标准的,请使用
fgets()
。对于测试,请在定义中添加
static
。请注意
sscanf(“str、%d”、&is\u linux)
不正确。应使用
%lu
或指定了
l
长度修饰符的相关转换规范来读取
无符号长
。在64位(非Windows)计算机上,扫描可能只设置8字节整数的4个字节;其他4个字节可能不是零,因此测试失败。为什么不打印
is\u linux
-小心地:
printf(“is\u linux=%lu\n”,is\u linux)?最好使用
strtol
而不是
sscanf
。在许多情况下,
无符号长
的大小与
无符号整数
相同。也许原因不同。@i486这也是一个符号问题,尽管大小相同。问题中的值是
1
,符号不起作用。@i486如果使用
%lu
,问题会消失吗?我觉得很有趣,一个叫i486的人会说
unsigned long
unsigned int
大小相同。在许多情况下
unsigned long
大小相同大小如
无符号int
。也许原因不同。@i486这也是一个符号问题,尽管大小相同。在问题中,值是
1
,符号不起作用。@i486如果使用
%lu
,问题会消失吗?我觉得有人叫i486说
无符号长
无符号整数
大小相同太有趣了。