对于循环执行失败,因为变量我不会递增,为什么?


#include <stdio.h>
#define NO_OF_STUDENTS 4

int main() {
    char c;
    int i;
    char * names[5];
    names[0] = "Jane";
    names[1] = "Jim";
    names[2] = "Jacques";
    names[3] = "Juan";
    names[4] = "Junlian";

    for (i = 0; i <= NO_OF_STUDENTS; i++);
        if (i = 0)
            printf("Front of the Line: %snn", names[i]);
        else
            printf("Followers: %snn", names[i]);
    scanf("%c", &c);
}

im试图使循环工作,但是循环只会在线的前面失败:Jane,它只是无法继续进行 else

谁能告诉我为什么循环会失败和变量,我会停留在0而不是为了显示其他名称?

实际上是一个C程序,而不是C 程序(如您所标记的),因为编译器至少应发出警告,即数组names的声明没有限定符const因为在C 字符串中具有常数字符数组的类型。

const char * names[5];
^^^^^

该程序有两个错误。第一个是在for语句

的末尾存在半分号
for (i = 0; i <= NO_OF_STUDENTS; i++);
                                    ^^^

,第二个是使用分配运算符,而不是IF语句

中的比较操作员
    if (i = 0)
         ^^^ 

这个明显常数之间没有关系

#define NO_OF_STUDENTS 4

和数组的声明

char * names[5];

因此,常数本身和数字5看起来像魔术数字。

您可以声明数组并同时初始化。

相应的C程序至少可以以下方式

#include <stdio.h>
#define NO_OF_STUDENTS  5
int main(void) 
{
    char c;
    int i;
    char * names[NO_OF_STUDENTS] =
    {
        "Jane", "Jim", "Jacques", "Juan", "Junlian"
    };
    for ( i = 0; i < NO_OF_STUDENTS; i++ )
    {
        if ( i == 0 )
            printf( "Front of the Line: %snn", names[i] );
        else
            printf( "Followers: %snn", names[i] );
    }
    scanf( " %c", &c );
    return 0;
}

或程序可以像

一样编写
#include <stdio.h>
int main(void) 
{
    char * names[] =
    {
        "Jane", "Jim", "Jacques", "Juan", "Junlian"
    };
    const size_t NO_OF_STUDENTS = sizeof( names ) / sizeof( *names );   
    for ( size_t i = 0; i < NO_OF_STUDENTS; i++ )
    {
        if ( i == 0 )
            printf( "Front of the Line: %snn", names[i] );
        else
            printf( "Followers: %snn", names[i] );
    }

    char c;
    scanf( " %c", &c );
    return 0;
}

最新更新