c-==运算符跳过条件if语句,即使条件为true

  • 本文关键字:条件 true if 运算符 语句 c windows
  • 更新时间 :
  • 英文 :


正在为下面的
编写程序,因此输入将是aaabbbccc

输出将是abc

#include<stdio.h>
int main()
{
char arr[10]={'0'};
char ch;
printf("enter input characters: ");
for(int i=0;i<10;i++){
ch=getchar();
if(arr[i]=='0')//skips here even though the array element has'0' 
//in it.
arr[i]=ch;
}
for(int i=0;i<10;i++){
if(arr[i]!='0')
printf("%c",arr[i]);
}
return 0;
}

使用

char arr[10]={'0'};

您只将第一个元素初始化为'0',其余所有元素都初始化为0(即整数值零,而不是字符'0'(。这当然意味着,除了当i == 0时,条件arr[i] == '0'将是false

如果你希望所有元素都是字符'0',那么你需要显式地初始化所有元素

来自C标准:

§6.7.8.21:

如果大括号括起的列表中的初始值设定项少于元素或成员聚合的,或用于初始化已知数组的字符串文字中的较少字符尺寸大于阵列中元素的尺寸,则骨料的剩余部分应为隐式初始化与具有静态存储持续时间的对象相同。

§6.7.8.10:

如果具有自动存储持续时间的对象未初始化明确地说,它的值是不确定的。如果对象具有静态存储持续时间未明确初始化,则:

--如果它具有指针类型,则将其初始化为空指针;

——如果它具有算术类型,则初始化为(正或无符号(零

--如果它是一个聚合,则每个成员都被初始化(递归(根据这些规则;

--如果是union,则初始化第一个命名成员(递归(根据这些规则。

强调挖掘。

char是C中的一种数字类型,因此,如果仅将第一个数组元素显式初始化为字符'0'(顺便说一句,它没有数值0(,则其余元素将具有数值0,并且比较'0'==0将为false。

最新更新