34

我目前有这个程序可以在控制台上打印一个文本文件,但是每一行下面都有一个额外的新行。如果文本是

你好世界

它会输出你好

世界

代码是这样的

#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
    FILE* fp;
    char input[80], ch = 'a';
    char key[] = "exit\n";
    int q;

    fp = fopen("c:\\users\\kostas\\desktop\\original.txt", "r+");

    while (!feof(fp)) {
        fgets(input, 80, fp);
        puts(input);
    }
    fclose(fp);

    return 0;
}
4

3 回答 3

82

通常人们会使用 fputs() 而不是 puts() 来省略换行符。在您的代码中,

puts(input);

会成为:

fputs(input, stdout);
于 2013-06-21T15:21:21.360 回答
13

puts()按库规范添加换行符。您可以printf改用,您可以在其中控制使用格式字符串打印的内容:

printf("%s", input);
于 2013-06-21T15:20:31.543 回答
4

您还可以编写自定义puts函数:

#include <stdio.h>

int my_puts(char const s[static 1]) {
    for (size_t i = 0; s[i]; ++i)
        if (putchar(s[i]) == EOF) return EOF;

    return 0;
}

int main() {
    my_puts("testing ");
    my_puts("C puts() without ");
    my_puts("newline");

    return 0;
}

输出:

testing C puts() without newline
于 2019-12-18T21:10:32.673 回答