如何在这个C程序中找到错误?
我正在学习数据结构,并且对C非常陌生。我无法找出导致此函数出错的原因:如何在这个C程序中找到错误?,c,data-structures,C,Data Structures,我正在学习数据结构,并且对C非常陌生。我无法找出导致此函数出错的原因: struct Student{ int id; char name[30]; double gpa; int ch; }; void displayStudents() { struct Student students[10]={ {1, ahmed ,3.6,43}, {2, mohamed, 3.2, 40}, {3,hassan, 3.0, 41},
struct Student{
int id;
char name[30];
double gpa;
int ch;
};
void displayStudents() {
struct Student students[10]={
{1, ahmed ,3.6,43},
{2, mohamed, 3.2, 40},
{3,hassan, 3.0, 41},
{4, hossam, 2.5, 35},
{5, hany, 2.3, 32},
{6, hala, 2.7, 37},
{7, hana, 2.8, 33},
{8, ramadan,3.8,46},
{9, sameh,3.7,43},
{10, nour,3.3,42}
};
for(int i=0; i<9; i++) {
printf("%d,%s,%lf, %d", students[i].id, students[i].name, students[i].gpa, students[i].ch);
}
}
我怀疑问题可能出在函数displayStudents()的参数中。我不知道该在那里键入什么,我到处搜索,什么也找不到。在C中使用字符串时出现错误。如果您使用delfine枚举类型声明所有使用的人名/姓氏,您的代码将正常工作。您还应该更改结构的定义。否则,C中的字符串需要更多的工作,例如内存分配
编辑:在代码中-使用初始化块定义结构-添加引号就足够了。然而,这不是一个通用的解决方案 在C中使用字符串时出错。如果delfine枚举类型声明了所有使用的人名/姓氏,则代码将正常工作。您还应该更改结构的定义。否则,C中的字符串需要更多的工作,例如内存分配
编辑:在代码中-使用初始化块定义结构-添加引号就足够了。然而,这不是一个通用的解决方案 您必须对字符串使用
“
”
void displayStudents() {
struct Student students[10]={
{1, "ahmed" ,3.6,43},
{2, "mohamed", 3.2, 40},
{3, "hassan", 3.0, 41},
{4, "hossam", 2.5, 35},
{5, "hany", 2.3, 32},
{6, "hala", 2.7, 37},
{7, "hana", 2.8, 33},
{8, "ramadan",3.8,46},
{9, "sameh",3.7,43},
{10, "nour",3.3,42}
};
for(int i=0; i<9; i++) {
printf("%d,%s,%lf, %d", students[i].id, students[i].name, students[i].gpa, students[i].ch);
}
}
输出:
1,ahmed,3.600000, 432,mohamed,3.200000, 403,hassan,3.000000, 414,hossam,2.500000, 355,hany,2.300000, 326,hala,2.700000, 377,hana,2.800000, 338,ramadan,3.800000, 469,sameh,3.700000, 43
您必须对字符串使用
”
void displayStudents() {
struct Student students[10]={
{1, "ahmed" ,3.6,43},
{2, "mohamed", 3.2, 40},
{3, "hassan", 3.0, 41},
{4, "hossam", 2.5, 35},
{5, "hany", 2.3, 32},
{6, "hala", 2.7, 37},
{7, "hana", 2.8, 33},
{8, "ramadan",3.8,46},
{9, "sameh",3.7,43},
{10, "nour",3.3,42}
};
for(int i=0; i<9; i++) {
printf("%d,%s,%lf, %d", students[i].id, students[i].name, students[i].gpa, students[i].ch);
}
}
输出:
1,ahmed,3.600000, 432,mohamed,3.200000, 403,hassan,3.000000, 414,hossam,2.500000, 355,hany,2.300000, 326,hala,2.700000, 377,hana,2.800000, 338,ramadan,3.800000, 469,sameh,3.700000, 43
在大多数语言中,字符和字符串都用引号初始化,单引号或双引号。在C语言中,没有字符串的概念,而是字符数组。 当声明一个char时,它里面的值用单引号初始化(当值是一个字符时),但是当使用char数组或指向char的指针时,为了字符串的目的,它里面的值用双引号初始化。另外,在struct中使用
typedef
也是一个好习惯,它使代码更具可读性。
你可以换成
typedef struct Std{ //any random name
int id;
char name[30];
double gpa;
int ch;
}Student;
void displayStudents() {
Student students[10]={ //no need to write struct everytime any more
{1, "ahmed" ,3.6,43},
{2, "mohamed", 3.2, 40},
{3,"hassan", 3.0, 41},
{4, "hossam", 2.5, 35},
{5, "hany", 2.3, 32},
{6, "hala", 2.7, 37},
{7, "hana", 2.8, 33},
{8, "ramadan",3.8,46},
{9, "sameh",3.7,43},
{10, "nour",3.3,42}
};
在大多数语言中,字符和字符串都用引号初始化,单引号或双引号。在C语言中,没有字符串的概念,而是字符数组。 当声明一个char时,它里面的值用单引号初始化(当值是一个字符时),但是当使用char数组或指向char的指针时,为了字符串的目的,它里面的值用双引号初始化。另外,在struct中使用
typedef
也是一个好习惯,它使代码更具可读性。
你可以换成
typedef struct Std{ //any random name
int id;
char name[30];
double gpa;
int ch;
}Student;
void displayStudents() {
Student students[10]={ //no need to write struct everytime any more
{1, "ahmed" ,3.6,43},
{2, "mohamed", 3.2, 40},
{3,"hassan", 3.0, 41},
{4, "hossam", 2.5, 35},
{5, "hany", 2.3, 32},
{6, "hala", 2.7, 37},
{7, "hana", 2.8, 33},
{8, "ramadan",3.8,46},
{9, "sameh",3.7,43},
{10, "nour",3.3,42}
};
“ahmed”未声明
错误消息的哪一部分不清楚?它清楚地告诉您没有名为ahmed
的变量。其他错误也一样。C中的字符串文本需要被引用:“ahmed”
“ahmed”未声明
错误消息的哪一部分不清楚?它清楚地告诉您没有名为ahmed
的变量。其他错误也一样。C中的字符串文本需要被引用:“ahmed”
除了编译器诊断之外,几乎像语法高亮显示一样,只是尖叫着看这里
,哎呀,我的意思是“看这里”
<代码>:)除了编译器诊断之外,几乎像语法高亮显示一样,我们只是尖叫着看这里
,哎呀,我的意思是“看这里”
<代码>:)