C 为结构变量赋值
我正在构造一个邻接列表,我正在使用它来生成一个有向图。我读了两个字符,然后用每个字符创建一个顶点,除非已经创建了带有该字符的顶点。我不熟悉结构,所以这让我很困惑。这些值没有被赋值,我的结果是一个空列表。我假设这与我忽略的指针有关,但我似乎找不到问题所在。我希望有人能帮忙。我将包括我的代码和一个示例输出 我的 正如您所看到的,没有一个字符是在结构内部打印的 编辑1:C 为结构变量赋值,c,struct,C,Struct,我正在构造一个邻接列表,我正在使用它来生成一个有向图。我读了两个字符,然后用每个字符创建一个顶点,除非已经创建了带有该字符的顶点。我不熟悉结构,所以这让我很困惑。这些值没有被赋值,我的结果是一个空列表。我假设这与我忽略的指针有关,但我似乎找不到问题所在。我希望有人能帮忙。我将包括我的代码和一个示例输出 我的 正如您所看到的,没有一个字符是在结构内部打印的 编辑1: I would want the expected output to look like a: A b: B a: B b: C
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)代码>
a
,而不是在adjListSearch()
中分配它main()
(尽管它不会对程序造成任何伤害)argv[1]
while(fscanf(p,%c%c,&a,&b)==2)
,尽管只有在这个程序中有奇数个字符需要处理时才重要。至少您测试了fscanf()
,这比我们看到的许多问题都要多有各种各样的问题
fclose(p)代码>和非自由(p<0.05)代码>
printf(“%c\n”,adjList[i].c)
而不是printf(“%c\n”,adjList[size].c)代码>
a
,而不是在adjListSearch()
中分配它main()
(尽管它不会对程序造成任何伤害)argv[1]
while(fscanf(p,%c%c,&a,&b)==2)
,尽管只有在这个程序中有奇数个字符需要处理时才重要。至少您测试了fscanf()
,这比我们看到的许多问题都要多有各种各样的问题
fclose(p)代码>和非自由(p<0.05)代码>
printf(“%c\n”,adjList[i].c)
而不是printf(“%c\n”,adjList[size].c)代码>
a
,而不是在adjListSearch()
中分配它main()
(尽管它不会对程序造成任何伤害)argv[1]
while(fscanf(p,%c%c,&a,&b)==2)
,尽管只有在这个程序中有奇数个字符需要处理时才重要。至少您测试了fscanf()
,这比我们看到的许多问题都要多有各种各样的问题
fclose(p)代码>和非自由(p<0.05)代码>
printf(“%c\n”,adjList[i].c)
而不是printf(“%c\n”,adjList[size].c)代码>
a
,而不是在adjListSearch()
中分配它main()
(尽管它不会对程序造成任何伤害)argv[1]
while(fscanf(p,%c%c,&a,&b)==2)
,尽管只有在这个程序中有奇数个字符需要处理时才重要。至少您测试了fscanf()
,这比我们看到的许多问题都要多这很有帮助,但我仍然无法打印出顶点结构的字符部分,以查看是否确实存在任何内容。@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