首页 > 解决方案 > == 运算符跳过条件 if 语句,即使条件为真

问题描述

试图为下面编写一个程序,
所以这里的输入将是 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;

}

标签: cwindows

解决方案


来自 C 标准:

§ 6.7.8.21:

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

§ 6.7.8.10:

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

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

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

— 如果是聚合,则每个成员都根据这些规则(递归地)初始化;

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

强调我的。

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


推荐阅读