尝试为下面的程序编写程序
所以这里
输入将为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;
}
答案 0 :(得分:1)
使用
char arr[10]={'0'};
您只能将 first 元素初始化为'0'
,所有其余元素都初始化为0
(即整数值零,而不是字符'0'
)。当然,这意味着除了i == 0
时以外,条件arr[i] == '0'
将为 false 。
如果您希望所有元素都是字符'0'
,则需要显式初始化所有元素。
答案 1 :(得分:1)
根据C标准:
第6.7.8.21节:
如果用大括号括起来的列表中的初始化程序少于元素或成员 用来初始化已知数组的字符串文字中的总计或更少的字符 大于数组中元素的大小,则其余部分应为 初始化与具有静态存储持续时间的对象相同。
第6.7.8.10节:
如果具有自动存储持续时间的对象未初始化 显然,它的值是不确定的。如果对象具有静态 存储期限未明确初始化,则:
-如果具有指针类型,则将其初始化为空指针;
-如果具有算术类型,则将其初始化为(正数或无符号)零;
-如果是聚合,则每个成员都将被初始化(递归) 根据这些规则;
-如果是isunion,则第一个命名成员被初始化(递归) 根据这些规则。
强调我的。
char
是C语言中的数字类型,因此,如果您仅将第一个数组元素显式初始化为字符'0'
(顺便说一下,它没有数字值{{1} }),其余的将具有数字值0
,比较值0
将为false。