Форум программистов, компьютерный форум CyberForum.ru

Добавить воскл знак в конец каждой строки в файле. - C++

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.64
ForEveR
Модератор
Эксперт С++
 Аватар для ForEveR
7955 / 4717 / 318
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
10.07.2010, 00:56     Добавить воскл знак в конец каждой строки в файле. #1
С++ но с использованием функций С.
Вообщем есть такое задание. Делал давно. Вот что получилось:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <cstring>
#include <cstdlib>
using namespace std;
int main()
{
    int i=0;
    char str[255];
    char*str2;
    FILE*f=fopen("C:\\Программирование\\C++\\Часть 1\\Ввод-вывод\\Voskl cnak\\Read.txt","r");
    FILE*f1=fopen("C:\\Программирование\\C++\\Часть 1\\Ввод-вывод\\Voskl cnak\\Write.txt","w");
    while(!feof(f))
    {
        fgets(str,255,f);
        str2=strncat(str,"!", 1);
        fprintf(f1,"%s",str2);
        puts(str2);
    }
    return 0;
}
Все бы ничего. Добавляет и все впоряде. НО выводит в файл и на консоль он вот так:

Knyaze debilushka
!Ololo
!Axaxaxaxaxa!

В чем может быть проблема?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.07.2010, 00:56     Добавить воскл знак в конец каждой строки в файле.
Посмотрите здесь:

Добавить в конец первой строки, последние n2-n1 слов второй строки C++
C++ Запись в конец строки в файле
C++ Добавить строку в конец массива
Добавить в конец каждой строки необходимо количество «*» что бы выровнять текст по правому краю большей строки C++
Конец строки в txt файле C++
Переписать содержимое файла А в файл В, перенося при этом в конец каждой строки все входящие в нее знаки препинания C++
Массив строк. Конец строки и конец массива C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
6a6kin
 Аватар для 6a6kin
232 / 102 / 2
Регистрация: 18.04.2010
Сообщений: 295
10.07.2010, 01:11     Добавить воскл знак в конец каждой строки в файле. #2
Есть такая отличная функция - append()
ForEveR
Модератор
Эксперт С++
 Аватар для ForEveR
7955 / 4717 / 318
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
10.07.2010, 01:14  [ТС]     Добавить воскл знак в конец каждой строки в файле. #3
6a6ka, Видимо это С++ но с использованием функций С. я писал просто так в начале темы? Хорошо. Уточню. С использованием МЕТОДОВ С. Работа соответсвенно никак не с классом string.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9383 / 5433 / 916
Регистрация: 25.07.2009
Сообщений: 10,428
10.07.2010, 01:16     Добавить воскл знак в конец каждой строки в файле. #4
'\0' в конце строки режется. попробуйте так:
C++
1
2
3
4
...
                fgets(str,253,f);
                str2=strncat(str,"!", 2);
...
ForEveR
Модератор
Эксперт С++
 Аватар для ForEveR
7955 / 4717 / 318
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
10.07.2010, 01:21  [ТС]     Добавить воскл знак в конец каждой строки в файле. #5
easybudda,
C++
1
2
fgets(str,253,f);
str2=strncat(str,"!", 2);
Ноль эмоций. И на экран и в файл вывод остался одинаковым
6a6kin
 Аватар для 6a6kin
232 / 102 / 2
Регистрация: 18.04.2010
Сообщений: 295
10.07.2010, 01:22     Добавить воскл знак в конец каждой строки в файле. #6
Насколько я понял, в конце строки стоит \r и получается, что идет перевод каретки, а потом только восклицательный знак.
ForEveR
Модератор
Эксперт С++
 Аватар для ForEveR
7955 / 4717 / 318
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
10.07.2010, 01:24  [ТС]     Добавить воскл знак в конец каждой строки в файле. #7
6a6ka, М... Возможно. Как убрать, без использования флагов С++?
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9383 / 5433 / 916
Регистрация: 25.07.2009
Сообщений: 10,428
10.07.2010, 01:35     Добавить воскл знак в конец каждой строки в файле. #8
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Lavroff, вот так читает строку и выводит её же со знаком "!"...
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#include <string.h>
 
#define MAX_LEN 255
#define TO_APPEND "!"
 
int main(void){
    char buf[MAX_LEN], * p;
    int add_chars = sizeof(TO_APPEND);
    while ( 1 ){
        fgets(buf, MAX_LEN - add_chars, stdin);
        if ( p = strrchr(buf, '\n') )
            *p = '\0';
        if ( ! *buf )
            break;
        strncat(buf, TO_APPEND, add_chars);
        printf("%s\n", buf);
    }
    
    return 0;
}
Только зачем такое в С++ нужно - никаких идей. А чем класс string не угодил?
ForEveR
Модератор
Эксперт С++
 Аватар для ForEveR
7955 / 4717 / 318
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
10.07.2010, 01:36  [ТС]     Добавить воскл знак в конец каждой строки в файле. #9
easybudda, Не угодил тем, что это 1-я часть книги Программирование на С++. А там еще не ООП и соответственно не STL. Кстати большое спасибо. Буду разбираться в коде
[Freeman]
34 / 34 / 6
Регистрация: 07.06.2010
Сообщений: 118
10.07.2010, 16:21     Добавить воскл знак в конец каждой строки в файле. #10
С использованием sting написал, намного проще
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <fstream>
#include <iostream>
#include <string>
using namespace std;
int main()
{
    ifstream iFile("text.txt");
    ofstream oFile("outText.txt");
    string buf;
    while(!iFile.eof() && iFile.good())
    {
        getline(iFile,buf);
        buf+="!";
        oFile<<buf<<endl;
        
    }
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.07.2010, 16:29     Добавить воскл знак в конец каждой строки в файле.
Еще ссылки по теме:

C++ Добавить маркер (альфа, бетта, гамма.) в конец каждой строки
C++ Добавить знак доллара после каждой цифры
C++ Переписать все цифры каждой строки файла в конец строки
C++ Перенести все цифры в конец каждой строки с сохранением взаимного исходного порядка (файловый ввод/вывод)
В конец каждой строки текстового файла дописать количество символов этой строки C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9383 / 5433 / 916
Регистрация: 25.07.2009
Сообщений: 10,428
10.07.2010, 16:29     Добавить воскл знак в конец каждой строки в файле. #11
[Freeman],
C++
1
2
3
4
5
6
7
...
while ( getline(iFile, buf) )
  oFile << buf << "!" << endl;
//и файлы закрывать не забываем
iFile.close();
oFile.close();
...
Yandex
Объявления
10.07.2010, 16:29     Добавить воскл знак в конец каждой строки в файле.
Ответ Создать тему
Опции темы

Текущее время: 21:51. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru