fgets while 循环问题

Issue with fgets while loop

目前我有这样的事情:

while(fgets(i, sizeof(i), stdin)!=NULL) {
    printf("%s", i);
    printf("line%d - j", j);
    j++

产生类似的东西:

line1
line1 - j
line2
line2 - j
line3line3 - j

我遇到的问题是我抓取的最后一行没有产生新行,第二个打印语句继续在同一行上打印。

有人知道如何解决这个问题以便它产生:

line1
line1 - j
line2
line2 - j
line3
line3 - j

你应该在你用 printf 写的每个字符串的末尾加上一些 '\n'。

 while(fgets(i, sizeof(i), stdin)!=NULL) { 
    printf("%s\n", i);
    printf("line%d - j\n", j);
    j++;

这应该可以解决您的问题。 再见!

通过添加检查字符串末尾是否有新行来修复:

if (strchr (line, '\n') != NULL) { 
    printf("%s", line); 
} 
else { 
    printf("%s\n", line);
}

还有李斯特先生建议的更短的版本:

printf(strchr(line, '\n') ?"%s" :"%s\n", line);

由于各种原因,fgets() 的结果可能包括也可能不包括结尾 '\n'
有的话建议去掉。

while(fgets(i, sizeof(i), stdin)!=NULL) {

  // delete potential \n - this works if \n exists or not
  i[strcspn(i,"\n")] = 0;

  printf("%s\n", i);         // add \n
  printf("line%d - j\n", j); // add \n
  j++
}