C ставит () без новой строки

В настоящее время у меня есть эта программа, которая печатает текстовый файл на консоли, но у каждой строки есть дополнительная новая строка ниже. если текст был

Привет, мир

будет выводить привет

Мир

код это

#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 ответа

Решение

puts() добавляет символ новой строки по спецификации библиотеки. Ты можешь использовать printf вместо этого, где вы можете контролировать то, что печатается с форматной строкой:

printf("%s", input);

Обычно можно использовать fputs() вместо put (), чтобы пропустить символ новой строки. В вашем коде

puts(input);

станет:

fputs(input, stdout);

Вы также можете написать собственную функцию put:

#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

Это должно работать:

      #include<stdio.h>
void put_s(char* s){
    while(*s) putchar(*s++);
}

Просто для того, чтобы иметь больше примеров, вот еще один, связанный с рекурсией:

      #include<stdio.h>
void put_s(char* s){
    if(!*s) return;
    putchar(*s);
    put_s(s+1);
}

Примечание. Я заметил, что ваш код не будет компилироваться из-за#include<iostream>иusing namespace std;.

Другие вопросы по тегам