我的文件有以下模式。
word1 word2 word3
wordzz word33 word2431 word341
等等。
现在我在一个结构数组中读取整个文件,数组的每个条目都维护着每行文件的链接列表。
现在整个代码很难解释,但问题就在这里。
在我尝试执行以下操作时的特定位置
printf("\n%s",ptr1->name);
puts(ptr1->name);
其中ptr1
是任何链表头部的ptr。 (比如第1行)
名称字段是名称,即word1,word2 etc.
现在输出是
word1word1
word2word2
word3
结果word3
没有打印两次?
整个问题甚至阻止我strcmp
列表的最后一个单词。
请帮助。
P.S。
当我这样做时
printf("%d",ptr1);
它会为ptr
打印三个不同的值,其中没有一个是NULL
。
我有两个相同结构的相似数组。我使用相同的函数来填充两个数组。 NOW
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;
}
}
如果我在上述地方遇到问题,而不是@“工作正常”的地方。
工作正常,我显示所有节点(名称)但在问题点我没有显示姓氏。
但如果我确实解决了这个问题,它也会显示该名称。
如果在此代码片段之前,我只使用printf打印第二个数组。它会打印每个节点(名称)。 有人能告诉我为什么以后不打印。?
答案 0 :(得分:2)
printf("\n%s",ptr1->name); // Problem
默认情况下, stdout
在连接到终端时是行缓冲的,您必须刷新流以打印字符串。在fflush(stdout)
调用后立即使用printf
来刷新stdout
。当流被缓冲时,打印新行字符也会刷新stdout
。
puts
不需要额外的换行符,因为puts
总是会在输出中附加换行符。
正如@JensGustedt在问题评论中提到的那样,将新行放在字符串之前就是坏习惯“认为某行是由'\ n'终止并相应地组织你的代码。”