#include <stdio.h>
int main(void)
{
int a = 4;
char alpha[26] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
for (int i = 0; i < 6; i++);
{
for (int b = 5; b > a; b--)
{
printf("%c", alpha[b]);
}
a--;
printf("\n");
printf("%d\n", a);
}
return 0;
}
我希望此代码像这样打印:
F
FE
FED
FEDC
FEDCB
FEDCBA
但是当前显示的输出是这个:
F
3
我不知道是否有任何错别字原因,我检查了很多,我做过的事情否则就错了。如果是拼写错误,请告诉我这是因为拼写错误,请不要帮我,因为我是C编程语言的新手。
要获得预期的输出,请在第一个循环结束时删除;
,然后删除最后一个printf
for(int i = 0; i < 6; i++) {
for(int b = 5; b > a; b--) {
printf("%c", alpha[b]);
}
a--;
printf("\n");
}
正如其他人所指出的,您的外部for
循环的末尾有一个;
,因此它的主体为空:
for(int i = 0; i < 6; i++);
请注意,您应该始终在启用警告的情况下进行编译(例如:):
gcc -c -Wall -Wextra foobar.c
如果有的话,编译器会标记该语句。
gcc:
foobar.c: In function ‘main’:
foobar.c:7:9: warning: this ‘for’ clause does not guard... [-Wmisleading-indentation]
for(int i = 0; i < 6; i++);
^~~
foobar.c:8:9: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the ‘for’
{
^
clang:
foobar.c:7:35: warning: for loop has empty body [-Wempty-body]
for(int i = 0; i < 6; i++);
^
foobar.c:7:35: note: put the semicolon on a separate line to silence this warning
1 warning generated.
注意,gcc
的较新版本不需要-Wextra
。
[clang
将仅使用clang -c foobar.c
标记该语句。
[最初,gcc
产生了与c的相似的“空体”警告
“ 即使代码正确,为什么程序仍显示其他内容?”
因为在第一个循环的开头的末尾有分号;
:
for(int i = 0; i < 6; i++);
这将导致假定循环体不被视为循环体。它被视为复合语句after,第一个循环已完成。
这就是为什么获得此输出的原因。
删除分号,您的程序将具有以下输出:
F
3
FE
2
FED
1
FEDC
0
FEDCB
-1
FEDCBA
-2
此循环的末尾有;
。没有身体。它什么都不做。
for(int i = 0; i < 6; i++);
^
这是错误的
char alpha[26] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
字符串为27个字符,您忘记了\ 0结尾
删除错误放置的第一个循环末尾的分号