首页 > 解决方案 > 转换为整数的 C 语句令人困惑?

问题描述

在下面的代码中有一个我无法理解的论点。我应该创建一个由字母组成的金字塔,每一行都有一个唯一的字母。每个字母/行都是连续格式,因此第 1 行可以是 A,第 2 行是 BB,第 3 行是 CC C。

问题在于用于创建金字塔行的第一个 For 循环。这是麻烦的部分:(输入-'A'+1)。“输入”是用户分配的字符变量。还有一个名为“alphabet”的字符变量,它分配了“A”,但除非我弄错了,否则这不是这里使用的。

从我的大脑在这部分代码中看到“A”的方式来看,它是一个字符文字。因此,带着这种想法,我创建了一个小程序,将整个语句的这一部分用作 printf 语句。变量“输入”是用户分配的。当我使用 %c 作为转换说明符运行它时,它完成时没有错误,但没有可见的输出,并且会发出哔哔声。当我使用 %d 运行它时,它会运行并给出我在从 A 中减去输入时所期望的整数(如果它们都是整数)。

我错过了什么?'A' 是否被转换为整数?我不明白它是如何工作的,即使我看到它确实有效。这是原始代码:

#include <stdio.h>

int main()
{
    int i, j;
    char input, alphabet='A';
    printf("Enter the uppercase character you want to print in the last row ");
    scanf("%c", &input);
    for (i=1; i<=(input- 'A'+1); ++i) {
        for(j=1; j<=i; ++j)
            { printf("%c", alphabet); }
            ++alphabet;
            printf("\n");
    }
    return 0;
}

感谢您在我从书籍和 YouTube 中学习时为我解决这个问题提供的任何帮助。

标签: c

解决方案


像这样的字符文字'A'实际上是整数。chartype 是有符号的 8 位整数类型。'A'等于65。您也可以查看 ASCII 表,看看哪个数字代表哪个字符。使用i <= (input -'A'+ 1)代码测试输入字符'A'与金字塔的高度之间的距离。如果输入是,那么'A'基本上i <= (input -'A'+ 1)只有1 次迭代的输入会发生打印单个.i <= (65 - 65 + 1)i <= 1A

由于char是整数,因此++alphabet将给出字母表中的下一个字符。

您的测试没有输出的原因printf%c可能是因为您尝试打印不可打印的字符。检查 ASCII 表并尝试使用它们的十进制值打印一些字母字符或数字。喜欢printf("%c", 65)应该输出A

这个小程序将打印大写字母。可能会帮助您更清楚地看到事物。

#include <stdio.h>

int main()
{
  for (int i = 65; i < 91; i++)
    printf("%d printed as character is %c\n", i, i);
  return 0;
}

输出

65 printed as character is A
66 printed as character is B
67 printed as character is C
68 printed as character is D
69 printed as character is E
70 printed as character is F
71 printed as character is G
72 printed as character is H
73 printed as character is I
74 printed as character is J
75 printed as character is K
76 printed as character is L
77 printed as character is M
78 printed as character is N
79 printed as character is O
80 printed as character is P
81 printed as character is Q
82 printed as character is R
83 printed as character is S
84 printed as character is T
85 printed as character is U
86 printed as character is V
87 printed as character is W
88 printed as character is X
89 printed as character is Y
90 printed as character is Z

推荐阅读