【发布时间】:2012-03-04 09:31:18
【问题描述】:
我的文件具有以下模式。
word1 word2 word3
wordzz word33 word2431 word341
等等。
现在我在一个结构数组中读取整个文件,数组的每个条目维护文件每一行的链表。
现在整个代码有点难以解释,但这就是问题所在。
当我尝试执行以下操作时,在特定的地方
printf("\n%s",ptr1->name);
puts(ptr1->name);
其中ptr1 是指向任何链表头部的ptr。 (比如第 1 行)
name 字段是名称,即word1,word2 etc.
现在输出是
word1word1
word2word2
word3
为什么word3 没有被打印两次?
这整个问题甚至阻止我strcmp 列表的最后一个字。
请帮忙。
附言
当我这样做时
printf("%d",ptr1);
它为ptr 打印三个不同的值,它们都不是NULL。
我有两个结构相同的相似数组。我使用相同的函数来填充这两个数组。现在
node* ptr,*ptr1;
ptr=first[i].ptr;
ptr1=second[i].ptr;
while(ptr!=NULL)
{
printf(" \n1");
printf(" %s", ptr->name); // Works Fine
if(!strcmp(ptr->name,"string"))
{
while(ptr1!=NULL)
{
printf("A %s ",ptr1->name);// Problem
fflush(stdout); // EDITS AS ASKED BY USER `pmg`
puts(ptr1->name);
if(!strcmp(ptr1->name,strt))
{
printf("\n 4\n");
return 1;
}
else
{
ptr1=ptr1->next;
}
}
return 0;
}
else
{
ptr=ptr->next;
}
}
我为什么在提到的地方遇到问题,而不是在“工作正常”的地方。
工作正常,我显示所有节点(名称)但在问题点我没有显示姓氏。
但如果我确实提出了问题,它也会显示该名称。
如果在此代码 sn-p 之前,我仅使用 printf 打印第二个数组。它确实打印每个节点(名称)。 谁能告诉我为什么以后不打印?
【问题讨论】:
-
根据您的代码,适用于 word2 的代码没有理由适用于 word3。你可能忽略了一些重要的事情。
-
您正确地发现了有问题的行:
printf("\n%s",ptr1->name);。将换行符放在输出字符串之前只是一个坏习惯。始终将一行视为以“\n”结尾并相应地组织您的代码。 -
@Jens Gustedt 这没有多大帮助,也许我不明白你想说什么。但对我来说问题是
printf("%s",ptr->name);不会为我打印最后一个字。 -
您是否在循环中错过了对
ptr1的分配(为新的prt重新初始化)? -
@pmg no ptr1 将指向与循环之前相同的列表。它确实打印了三个中的两个,并且只留下了最后一个,你把三个都打印出来了。另外,我无法得到 strcmp 的正确答案,因为我想与列表的姓氏进行比较,但它不会给我正确的答案。