【问题标题】:fputs() newline behaviour in cc 中的 fputs() 换行行为
【发布时间】:2013-11-20 14:04:49
【问题描述】:

无法理解程序(如下)。
我对fputs("\n",fp)的声明有点困惑 例如。让我输入:

不管你在下面是什么
你所做的决定了你。

如果我不提及fputs("\n",fp),则该字符串将出现在一行中。但是使用代码将其保存为键入的内容。

现在的问题是如何将\n 插入所需的位置,因为'通常\n 应附加在文本的末尾。

任何帮助将不胜感激。

int main()

{
    FILE *fp;

    char s[80];
    fp=fopen("abc.txt","w");
    if(fp==NULL)
    { 
            puts("Cannot open file");
            exit(1);
    }
    printf("\nEnter a few lines of text:\n");
    while(strlen(gets(s))>0)
    {
          fputs(s,fp);
          fputs("\n",fp);
    }
    fclose(fp);
    return 0;
}

【问题讨论】:

  • fputs 写入您给它的字符串,它不会在该字符串上附加任何字符。另一方面, puts 确实附加了一个换行符。这是一个不一致的 api。
  • 想一想,gets() 和 fgets() 的区别是一样的(除了 fgets() 允许缓冲区大小)。
  • 如果您看到错误 Type "char" is not compatible with parameter type "const char*",请确保您使用了双引号 "\n"

标签: c


【解决方案1】:

gets(不应使用,实际上已从最新的 C 标准中删除)不会将 \n 保存在其缓冲区中(而 fgets 会保存)。

并且fputsputs 不同,它不会在它写入的字符串的末尾自动插入一个。因此,通过在输出每个键入的行后添加fputs("\n", fp);(或fputc('\n', fp)),您可以在文件中插入缺少的换行符。

【讨论】:

    【解决方案2】:

    fputs 不会自动在输出中添加换行符(与 puts 不同)。

    【讨论】:

      猜你喜欢
      • 2018-12-18
      • 1970-01-01
      • 2011-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-19
      相关资源
      最近更新 更多