Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为结构变量赋值_C_Struct - Fatal编程技术网

C 为结构变量赋值

C 为结构变量赋值,c,struct,C,Struct,我正在构造一个邻接列表,我正在使用它来生成一个有向图。我读了两个字符,然后用每个字符创建一个顶点,除非已经创建了带有该字符的顶点。我不熟悉结构,所以这让我很困惑。这些值没有被赋值,我的结果是一个空列表。我假设这与我忽略的指针有关,但我似乎找不到问题所在。我希望有人能帮忙。我将包括我的代码和一个示例输出 我的 正如您所看到的,没有一个字符是在结构内部打印的 编辑1: I would want the expected output to look like a: A b: B a: B b: C

我正在构造一个邻接列表,我正在使用它来生成一个有向图。我读了两个字符,然后用每个字符创建一个顶点,除非已经创建了带有该字符的顶点。我不熟悉结构,所以这让我很困惑。这些值没有被赋值,我的结果是一个空列表。我假设这与我忽略的指针有关,但我似乎找不到问题所在。我希望有人能帮忙。我将包括我的代码和一个示例输出

我的

正如您所看到的,没有一个字符是在结构内部打印的

编辑1:

I would want the expected output to look like 
a: A b: B
a: B b: C
a: E b: X
a: C b: D
Size: 6
A
B
C
E
X
D
编辑2 如果有人能帮上忙,我仍然对此一无所知。

adjListSearch()
中,更改

if( adjList[i].c = a)

adjListSearch()
中,更改

if( adjList[i].c = a)

adjListSearch()
中,更改

if( adjList[i].c = a)

adjListSearch()
中,更改

if( adjList[i].c = a)


有各种各样的问题

  • 你应该使用
    fclose(p)和非
    自由(p<0.05)
  • 您应该打印
    printf(“%c\n”,adjList[i].c)
    而不是
    printf(“%c\n”,adjList[size].c)
  • 正如his中指出的,您需要比较
    a
    ,而不是在
    adjListSearch()
    中分配它
  • 有多个未使用的变量(我使用的编译选项抱怨它们)
  • 不需要声明
    main()
    (尽管它不会对程序造成任何伤害)
  • 您没有检查是否有要使用的
    argv[1]
  • 您没有检查是否打开了该文件
  • 您应该真正使用
    while(fscanf(p,%c%c,&a,&b)==2)
    ,尽管只有在这个程序中有奇数个字符需要处理时才重要。至少您测试了
    fscanf()
    ,这比我们看到的许多问题都要多
  • 在下面的代码中,我打印了更多信息性的状态消息

    main.c 样本输出
    有各种各样的问题

  • 你应该使用
    fclose(p)和非
    自由(p<0.05)
  • 您应该打印
    printf(“%c\n”,adjList[i].c)
    而不是
    printf(“%c\n”,adjList[size].c)
  • 正如his中指出的,您需要比较
    a
    ,而不是在
    adjListSearch()
    中分配它
  • 有多个未使用的变量(我使用的编译选项抱怨它们)
  • 不需要声明
    main()
    (尽管它不会对程序造成任何伤害)
  • 您没有检查是否有要使用的
    argv[1]
  • 您没有检查是否打开了该文件
  • 您应该真正使用
    while(fscanf(p,%c%c,&a,&b)==2)
    ,尽管只有在这个程序中有奇数个字符需要处理时才重要。至少您测试了
    fscanf()
    ,这比我们看到的许多问题都要多
  • 在下面的代码中,我打印了更多信息性的状态消息

    main.c 样本输出
    有各种各样的问题

  • 你应该使用
    fclose(p)和非
    自由(p<0.05)
  • 您应该打印
    printf(“%c\n”,adjList[i].c)
    而不是
    printf(“%c\n”,adjList[size].c)
  • 正如his中指出的,您需要比较
    a
    ,而不是在
    adjListSearch()
    中分配它
  • 有多个未使用的变量(我使用的编译选项抱怨它们)
  • 不需要声明
    main()
    (尽管它不会对程序造成任何伤害)
  • 您没有检查是否有要使用的
    argv[1]
  • 您没有检查是否打开了该文件
  • 您应该真正使用
    while(fscanf(p,%c%c,&a,&b)==2)
    ,尽管只有在这个程序中有奇数个字符需要处理时才重要。至少您测试了
    fscanf()
    ,这比我们看到的许多问题都要多
  • 在下面的代码中,我打印了更多信息性的状态消息

    main.c 样本输出
    有各种各样的问题

  • 你应该使用
    fclose(p)和非
    自由(p<0.05)
  • 您应该打印
    printf(“%c\n”,adjList[i].c)
    而不是
    printf(“%c\n”,adjList[size].c)
  • 正如his中指出的,您需要比较
    a
    ,而不是在
    adjListSearch()
    中分配它
  • 有多个未使用的变量(我使用的编译选项抱怨它们)
  • 不需要声明
    main()
    (尽管它不会对程序造成任何伤害)
  • 您没有检查是否有要使用的
    argv[1]
  • 您没有检查是否打开了该文件
  • 您应该真正使用
    while(fscanf(p,%c%c,&a,&b)==2)
    ,尽管只有在这个程序中有奇数个字符需要处理时才重要。至少您测试了
    fscanf()
    ,这比我们看到的许多问题都要多
  • 在下面的代码中,我打印了更多信息性的状态消息

    main.c 样本输出
    这很有帮助,但我仍然无法打印出顶点结构的字符部分,以查看是否确实存在任何内容。@Fluxxxy:您也可以发布预期的输出吗?我已将其添加到底部的原始帖子中。这很有帮助,但我似乎仍然无法打印出顶点结构的字符部分,以查看是否确实存在任何内容有任何内容。@Fluxxxy:您也可以发布预期的输出吗?我已将其添加到底部的原始文章中。这很有帮助,但我仍然无法打印顶点结构的字符部分,以查看是否确实有任何内容。@Fluxxxy:您也可以发布预期的输出吗?我已将其添加到底部的原始文章中底部。这有帮助,但我似乎仍然无法打印o
    if( adjList[i].c = a)
    
    if( adjList[i].c == a)
    
    #include "my.h"
    
    int main(int argc, char *argv[])
    {
        VERTEX *adjList;
        adjList  = (VERTEX *)calloc(26, sizeof(VERTEX));
        FILE *p;
        char a;
        char b;
        int check1 = 0;
        int check2 = 0;
        int size = 0;
        int i;
    
        if (argc != 2)
        {
            fprintf(stderr, "Usage: %s file\n", argv[0]);
            return 1;
        }
    
        if ((p = fopen(argv[1], "r")) == 0)
        {
            fprintf(stderr, "Failed to open file %s for reading\n", argv[1]);
            return 1;
        }
    
        while (fscanf(p, " %c %c", &a, &b) == 2)
        {
            printf("a: %c b: %c\n", a, b);
    
            check1 = adjListSearch(a, size, adjList);
    
            if (check1 == 1)
            {
                printf("Adding a = %c\n", a);
                adjList[size++].c = a;
            }
            check2 = adjListSearch(b, size, adjList);
            if (check2 == 1)
            {
                printf("Adding b = %c\n", b);
                adjList[size++].c = b;
            }
        }
        printf("Size: %d\n", size);
        for (i = 0; i < size; i++)
        {
            printf("%c\n", adjList[i].c);
        }
    
        fclose(p);
    
        return 0;
    }
    
    #include "my.h"
    
    int adjListSearch(char a, int size, VERTEX *adjList)
    {
        int i;
    
        if (size == 0)
        {
            printf("empty\n");
            return 1;
        }
    
        for (i = 0; i < size; i++)
        {
            if (adjList[i].c == a)
            {
                printf("found %c\n", a);
                return 0;
            }
        }
        printf("not found %c\n", a);
        return 1;
    }
    
    A B
    B C
    E X
    C D
    
    a: A b: B
    empty
    Adding a = A
    not found B
    Adding b = B
    a: B b: C
    found B
    not found C
    Adding b = C
    a: E b: X
    not found E
    Adding a = E
    not found X
    Adding b = X
    a: C b: D
    found C
    not found D
    Adding b = D
    Size: 6
    A
    B
    C
    E
    X
    D