put显示但%s没有

时间:2012-03-04 09:31:19

标签: c string puts

我的文件有以下模式。

  

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打印第二个数组。它会打印每个节点(名称)。 有人能告诉我为什么以后不打印。?

1 个答案:

答案 0 :(得分:2)

printf("\n%s",ptr1->name); // Problem
默认情况下,

stdout在连接到终端时是行缓冲的,您必须刷新流以打印字符串。在fflush(stdout)调用后立即使用printf来刷新stdout。当流被缓冲时,打印新行字符也会刷新stdout

puts不需要额外的换行符,因为puts总是会在输出中附加换行符。

正如@JensGustedt在问题评论中提到的那样,将新行放在字符串之前就是坏习惯“认为某行是由'\ n'终止并相应地组织你的代码。”