如何在这个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},

我正在学习数据结构,并且对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},
    {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”
除了编译器诊断之外,几乎像语法高亮显示一样,只是尖叫着
看这里
,哎呀,我的意思是
“看这里”
<代码>:)除了编译器诊断之外,几乎像语法高亮显示一样,我们只是尖叫着
看这里
,哎呀,我的意思是
“看这里”
<代码>:)