【发布时间】:2022-01-12 13:39:59
【问题描述】:
我对 C 非常陌生,并且对程序的这一部分有一些疑问。
我知道这是在计算字母,但是如果你比较变量 c 和 'a',它是如何工作的。
c 是 0,a 在 ASCII 码中是十进制的 97,所以无论如何都没有 if 语句是真的?
if ( c >= 'a' && c <= 'z' ){
c-='a';
A[c]++;
还有什么 A[c]++;当数组中只有 1 个元素时执行 int A[27] = {0}; ?
int c=0;
int A[27] = {0};
int main()
{
do{
if ( c >= 'a' && c <= 'z' ){
c-='a';
A[c]++;
}
else if ( c >= 'A' && c <= 'Z' ){
c-='A';
A[c]++;
}
else if (c == '\n'){
continue;
}
else{
A[26]++;
}
} while ((c = fgetc(data1)) != EOF);
for (c = 0; c < sizeof A / sizeof A[0] - 1; c++)
{
printf("%c:%02d\t", c+'a', A[c]);
}
}```
【问题讨论】:
-
int A[27] = {0};定义了一个数组(命名为A),其中包含int类型的27 个元素(全部)。第一个元素 (A[0]) 被显式赋值为0,其他 26 个元素被隐式初始化为0(在 C 中没有部分初始化)。注意数组索引,对于 27 个元素,从0到26。 -
c = 0 与 c = '0' 不同。字符“0”的 ASCII 数值为 48。两者都小于 65 的“A”。
-
@stark 谢谢你的帮助,但是当 if 语句为真时我不明白 c >= 'a' && c