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;
.