#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;
}