Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Проблемы с потоками в С

44K
14 апреля 2010 года
m9yt
25 / / 27.02.2010
В общем у меня такая проблема-неудачная запись в файл.
Пример:
Код:
#include<iostream>
#include <cstdio>
#include <string>
using namespace std;

struct human
{
    string family;
    int year;
};

void main ()
{
human a;
a.family="Ivanov";
a.year=29;    
FILE *f;
f=fopen("myfile.txt", "wb");
fwrite(&a,sizeof(human),1,f);
fclose(f);
}


После выполнения программы создается файл со всякими кракозябрами.
47K
14 апреля 2010 года
Cka3o4HuK
31 / / 21.10.2009
Что-то я не заметил тут никаких потоков, ну да ладно. Первое что бросилось в глаза:
в описании struct human
в main при объявлении student a;
Если это не опечатка при создании темы, то операция sizeof(student) скорее всего вернет NULL или еще какой-либо хлам. В любом случае это не то что вы хотели ;-)
87
14 апреля 2010 года
Kogrom
2.7K / / 02.02.2008
Во первых, это не C. Во вторых, этот код не может быть скомпилирован.

Вывод: надо почитать учебник по C++.
14
14 апреля 2010 года
Phodopus
3.3K / / 19.06.2008
Тип string это во-первых C++совский тип (все остальное больше смахивает на C), во вторых его так не сохраняют.
44K
14 апреля 2010 года
m9yt
25 / / 27.02.2010
Цитата: Kogrom
Во первых, это не C. Во вторых, этот код не может быть скомпилирован.

Вывод: надо почитать учебник по C++.



Еще как может!Я исправил код.

307
14 апреля 2010 года
Artem_3A
863 / / 11.04.2008
 
Код:
struct human
{
    string family;
    int year;
};
...
student a;


как ты это объяснишь? магия?

потом, ты пишешь в поток структуру, а ты уверен, что компилятор знает как ее туда вкатать? да еще и тип стринг, вообще то это уже и не с, да и к тому же на сколько я понимаю стринг внутри себя содежит массив чаров, как думаешь, запишется весь массив или только адрес первого элемента?
еще ты открываешь с флагом "wb" то есть если мне не изменяет память то это можно понять как "на запись бинарный", потом удивляешься хламу?

итог: иди читай умные книжки, бо прежде чем что то делать надо понимать, что ты делаешь!

[QUOTE=Cka3o4HuK]Что-то я не заметил тут никаких потоков[/QUOTE]
а они там как бы и есть, правда не объектно ориентированные, не си плаз плазные, но все же файловые потоки ввода\вывода.

[QUOTE=Cka3o4HuK]Если не опечатка при создании темы, то операция sizeof(student) скорее всего вернет NULL или еще какой-либо хлам.[/QUOTE]
вернет 4 байта или 32 бита, или слово, или размер типа инт, угадаешь почему? потому что по умолчанию используется тип инт, правда все более или менее продвинутые и современные компиляторы просто выругаются матом.
44K
14 апреля 2010 года
m9yt
25 / / 27.02.2010
Цитата: Artem_3A
 
Код:
struct human
{
    string family;
    int year;
};
...
student a;


как ты это объяснишь? магия?

потом, ты пишешь в поток структуру, а ты уверен, что компилятор знает как ее туда вкатать? да еще и тип стринг, вообще то это уже и не с, да и к тому же на сколько я понимаю стринг внутри себя содежит массив чаров, как думаешь, запишется весь массив или только адрес первого элемента?
еще ты открываешь с флагом "wb" то есть если мне не изменяет память то это можно понять как "на запись бинарный", потом удивляешься хламу?

итог: иди читай умные книжки, бо прежде чем что то делать надо понимать, что ты делаешь!


Код поправил, опечатка была.А я тут не причем, это наши преподы такие методички "умные" делают.

307
14 апреля 2010 года
Artem_3A
863 / / 11.04.2008
Цитата: m9yt
Код поправил, опечатка была.А я тут не причем, это наши преподы такие методички "умные" делают.



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

зы:под интернетом я понимаю возможность скачать умных книжек и почитать, а то еще подумаешь чего.

зызы: и не вздумай еще раз использовать отмазку "преподы - идиоты", это моя фишка, ее не трогать! научись сам отвечать за свою глупость или придумай чего нить посвежее и креативней.

Код:
#include<iostream>
#include <cstdio>
using namespace std;

struct human
{
    string family;
    int year;
};

void main
{
    human a;
    a.family="Ivanov";
    a.year=29;    
    FILE *f;
    f=fopen("myfile.txt", "w");
    [COLOR="Red"]fprintf(f,"%s\n%d\n",a.family.c_str(),a.year);[/COLOR]
    fclose(f);
}
535
14 апреля 2010 года
Нездешний
537 / / 17.01.2008
[QUOTE=m9yt]А я тут не причем, это наши преподы такие методички "умные" делают[/QUOTE]Мопед не мой, я просто разместил объву
44K
14 апреля 2010 года
m9yt
25 / / 27.02.2010
Цитата: Artem_3A
ну ладно, допустим, что преподы идиоты, в чего я не очень верю, но мозг то и интернет тебе на что? шляпу носить и в контакте висеть?

зы:под интернетом я понимаю возможность скачать умных книжек и почитать, а то еще подумаешь чего.

Код:
#include<iostream>
#include <cstdio>
using namespace std;

struct human
{
    string family;
    int year;
};

void main
{
    human a;
    a.family="Ivanov";
    a.year=29;    
    FILE *f;
    f=fopen("myfile.txt", "w");
    [COLOR="Red"]fprintf(f,"%s\n%d\n",a.family.c_str(),a.year);[/COLOR]
    fclose(f);
}


Я читаю 2 книги Шилда, Вконтакте не увлекаюсь!Не надо так категорично делать выводы.
За код спасибо!)

307
14 апреля 2010 года
Artem_3A
863 / / 11.04.2008
Цитата: m9yt
Я читаю 2 книги Шилда



а вот в книжках товарисча Шилда это все описано и расписано будь здоров. тут тебе не отвертеться, что Шилд - идиот, пишет типа вот такие "умные" книжки! так что признавайся или не Шилда или не читаешь.:D ...хотя может все вместе!0_о

87
14 апреля 2010 года
Kogrom
2.7K / / 02.02.2008
Цитата: m9yt
Еще как может!Я исправил код.



Ты ошибаешься. Например, я вижу, что чего-то не хватает после main. Я вижу, что для std::string нет заголовочного файла. Не будет компилироваться.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог