【发布时间】:2020-10-21 20:43:12
【问题描述】:
这是我的另一个问题。 我不明白那些代码。 提供的代码的输出是:
N
O
R
c
u
y
z
我的问题是:
-
a[i] > a[i + 1]它们是字符,而不是数字。为什么要比较两个字符? 这没有意义。还是我应该期望它们产生布尔值? -
printf ("%c\n", a[i] + 2);-->a[i] + 2数组元素的顺序似乎正在发生一些事情。如何以及为什么? 我知道输出应该是 7 行单个字符。
#include <stdio.h>
int main (void)
{
char a[] = { 'w', 's', 'x', 'a', 'P', 'L', 'M' };
int i, tmp, flag;
do
{
flag = 0;
for (i = 0; i < 7; i++)
{
if (a[i] > a[i + 1])
{
tmp = a[i];
a[i] = a[i + 1];
a[i + 1] = tmp;
flag = 1;
}
}
}
while (flag == 1);
for (i = 0; i < 7; i++)
printf ("%c\n", a[i] + 2);
printf ("\n");
return 0;
}
【问题讨论】:
-
当
i在第一个循环中为6时,代码读取a缓冲区的末尾。 -
@Turuudo 你在哪里找到了这个糟糕的代码?不要在这里拖任何垃圾
-
与其弄清楚这段代码,不如阅读 C 编程简介。
-
“我们为什么要比较两个字符?这没有意义” - 为什么不呢?您从未在字典中或电话簿中查找过一个词吗?
-
能详细描述一下吗?
标签: c for-loop if-statement char do-while