Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> fputs() - конвертинг "\0" -> "\n", не пашет :( 
:(
    Опции темы
ressac
Дата 29.3.2007, 21:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 345
Регистрация: 25.11.2006

Репутация: нет
Всего: 1



fputs();

выше указанная функция по идее должна конвертить конечный символ "\0" маcсива  в "\n" чтоб слова при записи в файл не сливались... или я что-то путаю?

Код


#include <stdio.h>
#define L 21

void write    (char *);
void read    (char *);

main()
{

    char path[L*2];

    printf("\n\n file name: ");
    gets(path);
    system("cls");

    write(path);
    read(path);

    puts("\n");
    system("pause");

}

//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::://

void write (char *path)
{

    FILE* pf;

    char word[L];

    if((pf=fopen(path,"w"))!=NULL)
    {

        printf("\n word: ");

        while(strcmp((gets(word)),"END"))
        {

            fputs(word,pf);
            fputs("\n",pf); // пробелму это я решил так, но что-то мне это решение не очень :((...

            system("cls");
            printf("\n word: ");

        }

        fclose(pf);

    }
    else
    {

        puts("\n\n Error. \n\n");
        system("pause");
        exit(0);

    }

    system("cls");

}

//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::://

void read (char *path)
{

    FILE *pf;

    char word[L];

    pf=fopen(path,"r");

    while((fgets(word,L+1,pf))!=NULL)
        puts(word);

    fclose(pf);

}





PM MAIL   Вверх
apook
Дата 29.3.2007, 21:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 794
Регистрация: 12.7.2006

Репутация: 9
Всего: 23



А что вообще должно получиться
fputs( "", pf ); // вообще-то сам внесет '\n';



--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
ressac
Дата 29.3.2007, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 345
Регистрация: 25.11.2006

Репутация: нет
Всего: 1



apook
в том то дело что и не вносит
PM MAIL   Вверх
apook
Дата 29.3.2007, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 794
Регистрация: 12.7.2006

Репутация: 9
Всего: 23



Код

        while(strcmp((fgets(word, L, stdin )),"END\n"))
        {

            fputs(word,pf);
            //fputs("",pf); // пробелму это я решил так, но что-то мне это решение не очень :((...

            system("cls");
            printf("\n word: ");

        }

Проблема в другом переменная word большого размера
и пока не наполнится gets считает что это не есть конец строки

Это сообщение отредактировал(а) apook - 29.3.2007, 22:30


--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
ressac
Дата 29.3.2007, 22:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 345
Регистрация: 25.11.2006

Репутация: нет
Всего: 1



apook, ну это в принципе одно и тоже, просто "\n" добавляет fgets, а fputs работал так как и раньше...

Цитата

Проблема в другом переменная word большого размера
и пока не наполнится gets считает что это не есть конец строки


только что пробывал это сделать и тот-же самый результат ,если это делать с gets();


вообщем мой вопрос в том что если fputs() находит "\0" почему он его не конверит в "\n" в файле, а пишет просто всё вместе.

плюс когда fgets() читает из файла он вроде бы тот-же "\n" должен менять на "\0", когда он просто ставит "\0" после "\n"  smile

Это сообщение отредактировал(а) ressac - 29.3.2007, 22:54
PM MAIL   Вверх
apook
Дата 29.3.2007, 22:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 794
Регистрация: 12.7.2006

Репутация: 9
Всего: 23



непонел
Код

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define L 21

void write    (char *);
void read    (char *);

main()
{

    char path[L*2];

    printf("\n\n file name: ");
    scanf( "%s", path );
    system("cls");

    write(path);
    read(path);

    puts("");
    system("pause");

}

//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::://

void write (char *path)
{

    FILE* pf;

    char word[ L ];

    if((pf=fopen(path,"w"))!=NULL)
    {

        printf("\n word: ");

        while(strcmp((fgets(word, L, stdin )),"END\n"))
        {

            fputs(word,pf);
            //fputs("",pf); // пробелму это я решил так, но что-то мне это решение не очень :((...

            system("cls");
            printf("\n word: ");

        }

        fclose(pf);

    }
    else
    {

        puts("\n\n Error. \n\n");
        system("pause");
        exit(0);

    }

    system("cls");

}

//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::://

void read (char *path)
{

    FILE *pf;

    char word[L];

    pf=fopen(path,"r");

    while((fgets(word,L+1,pf))!=NULL)
        printf( "%s", word );

    fclose(pf);


}

это так работает?



--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
ressac
Дата 29.3.2007, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 345
Регистрация: 25.11.2006

Репутация: нет
Всего: 1



работает как? smile  я что-то тебя не понимаю...
работает так как и раньше только ты поменял gets на fgets.. и ещё +/-

прочитай моё сообще выше я его доредактил..
PM MAIL   Вверх
apook
Дата 29.3.2007, 23:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 794
Регистрация: 12.7.2006

Репутация: 9
Всего: 23



так ты хочешь чтоб '\n' не было? fputs и puts всегда добавляет '\n'
у меня твой код выводит в файл с концом строки т.е каждая строка
отдельно



Это сообщение отредактировал(а) apook - 29.3.2007, 23:36


--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
ressac
Дата 30.3.2007, 00:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 345
Регистрация: 25.11.2006

Репутация: нет
Всего: 1



apook

я хочу чтоб он был, но чтоб его добавлял САМ fputs() но он этого не делает!. у меня все слова склеиваются если я перестану насильно впихивать "\n" в файл, понимаешь?

всё коды что выше написаны тут мной и тобой они насильно впихивают "\n" в файл одним или другим способом, в то время как по идее fputs сам должен это делать...

даже если мы будет давать выход на экран  fputs(word,stdout); он серовно не будет ставить "\n" после слова и не важно следущее :

Цитата

Проблема в другом переменная word большого размера
и пока не наполнится gets считает что это не есть конец строки


ни в первом ни во втором случае (не с файлом не с stdout )

а puts(); да он всегда ставит "\n"


PM MAIL   Вверх
apook
Дата 30.3.2007, 00:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 794
Регистрация: 12.7.2006

Репутация: 9
Всего: 23



 smile 
Код

        while(strcmp((fgets(word, L, stdin )),"END\n"))
        {

            fputs(word,pf);
            system("cls");
            printf("\n word: ");

        }

где тут насильное впихивание '\n'

Это сообщение отредактировал(а) apook - 30.3.2007, 00:24


--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
apook
Дата 30.3.2007, 00:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 794
Регистрация: 12.7.2006

Репутация: 9
Всего: 23



 smile 


--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
ressac
Дата 30.3.2007, 00:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 345
Регистрация: 25.11.2006

Репутация: нет
Всего: 1



=)

fgets() впихивает его, ты вот даже ставишь сравнение "END\n" а не просто "END" потому что там уже есть это НОВАЯ ЛИНИЯ smile теперь идём дальше и натыкаемся НА fputs() он в свою очередь считывает весь этот масив до "\0" а до "\0"  у нас стоит "\n" поэтому и выходит новая линия в файле.

ты понимаешь? smile 
или я тебя понимаю ? smile

добавь в while следущее:

Код


for(x=0;x<strlen(word)+1;x++)
   printf("\n%i\n",word[x]);

getch();




предпоследней цифрой должно быть 10 по таблице ASCII это и есть \n а последней будет 0 а это и есть конец массива \0

PM MAIL   Вверх
ressac
Дата 30.3.2007, 01:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 345
Регистрация: 25.11.2006

Репутация: нет
Всего: 1



 smile 

 smile  ничё не понимаю, пойду спать, может во сне я всё пойму smile smile  smile smile 

PM MAIL   Вверх
Fazil6
Дата 30.3.2007, 08:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 35
Всего: 60



Цитата(ressac @  29.3.2007,  21:44 Найти цитируемый пост)
выше указанная функция по идее должна конвертить конечный символ "\0" маcсива  в "\n" чтоб слова при записи в файл не сливались... или я что-то путаю?

скорее путаешь. 
Цитата

Синтаксис          #include <stdio.h>
                   int fputs(char * string, FILE * stream);

Файл, содержащий   stdio.h
прототип

Описание           Функция fputs копирует строку, ограниченную нулевым
                   байтом  в  поток  stream.  Она не добавляет в конец
                   строки символ перехода на новую строку и не выводит
                   нулевой символ.

Возвращаемое       При успешном завершении fputs возвращает последний
значение           выведенный символ. В противном случае возвращает
                   EOF.

Переносимость      fputs поддерживается системой UNIX и стандартом
                   ANSI C.   Кроме  этого  определена  в  Kernighan  &
                   Ritchie.


с чего ты взял, что должно что-то преобразовываться?
PM MAIL   Вверх
ressac
Дата 30.3.2007, 10:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 345
Регистрация: 25.11.2006

Репутация: нет
Всего: 1



Fazil6, у меня в книге это написано smile
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0983 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.