即使代码正确,为什么该程序还会显示其他内容?

问题描述 投票:1回答:6
#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编程语言的新手。

c arrays for-loop
6个回答
1
投票

要获得预期的输出,请在第一个循环结束时删除;,然后删除最后一个printf

for(int i = 0; i < 6; i++) { 
    for(int b = 5; b > a; b--) { 
        printf("%c", alpha[b]); 
     } 
     a--; 
     printf("\n"); 
}

1
投票

正如其他人所指出的,您的外部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的相似的“空体”警告


1
投票

即使代码正确,为什么程序仍显示其他内容?

因为在第一个循环的开头的末尾有分号;

for(int i = 0; i < 6; i++);

这将导致假定循环体不被视为循环体。它被视为复合语句after,第一个循环已完成。

这就是为什么获得此输出的原因。


删除分号,您的程序将具有以下输出:

F
3
FE
2
FED
1
FEDC
0
FEDCB
-1
FEDCBA
-2

0
投票

此循环的末尾有;。没有身体。它什么都不做。

    for(int i = 0; i < 6; i++);
                              ^

0
投票

这是错误的

char alpha[26] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

字符串为27个字符,您忘记了\ 0结尾


0
投票

删除错误放置的第一个循环末尾的分号

© www.soinside.com 2019 - 2024. All rights reserved.