c - 转换为整数的 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 中学习时为我解决这个问题提供的任何帮助。
解决方案
像这样的字符文字'A'
实际上是整数。char
type 是有符号的 8 位整数类型。'A'
等于65
。您也可以查看 ASCII 表,看看哪个数字代表哪个字符。使用i <= (input -'A'+ 1)
代码测试输入字符'A'
与金字塔的高度之间的距离。如果输入是,那么'A'
基本上i <= (input -'A'+ 1)
只有1 次迭代的输入会发生打印单个.i <= (65 - 65 + 1)
i <= 1
A
由于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
推荐阅读
- qt - Qt,MSVC,抑制 moc_ 中的编译器警告
- mysql - 带有内部联接的公用表表达式
- javascript - UnhandledPromiseRejectionWarning:错误:无效整数:
- intellij-idea - 如何映射一个
在 PhpStorm 中使用 IdeaVim? - typescript - 从泛型类中获取方法的参数 - TypeScript
- c - 源文件更改时二进制文件不重建
- react-native - 如何在保持位置的同时放大图像?
- jquery - jQuery 预加载大图像,加载进度更新百分比
- redis - 我可以在一个微服务域中使用 redis master 并由不同的微服务使用 redis slave 作为共享数据的一种方式吗?
- r - R:更新 XML 文件中的数据