Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Проблемы с потоками в С


Автор: m9yt 14.4.2010, 13:09
В общем у меня такая проблема-неудачная запись в файл.
Пример:

Код

#include<iostream>
#include <cstdio>
using namespace std;
struct student
{
    string family;
    int year;
};

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


После выполнения программы создается файл со всякими кракозябрами. 

Автор: azesmcar 14.4.2010, 13:14
Цитата

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

Вот и верь после этого наружной рекламе smile где обещанные потоки?

Цитата(m9yt @  14.4.2010,  13:09 Найти цитируемый пост)
После выполнения программы создается файл со всякими кракозябрами.  

ну и что, а ты хотел бинарные данные в notepad увидеть?

Автор: m9yt 14.4.2010, 13:17
У нас лаба такая.Как я буду выполнять удаление элементов, если я даже не вижу их отображение.
2 часть лабы-потоки в С++-такой проблемы не возникает.

Автор: InvalidProperty 14.4.2010, 13:17
проблемы не только "с потоками", но и еще с пониманием вопроса. ИМХО, тема "проблема с потоками" подразумевает под собой проблему не с потоками ввода/вывода, а с потоками, как с системными объектами, которые являются частью процесса, конкурируют за ресурсы и время исполнения и выполняются в рамках одного процесса.

Косательно твоего вопроса. Что ты понимаешь под "кракозябрами"? число 29 запишется как int, а 29 это вполне себе такой читаемый кракозябный символ, на сколько я помню. Что тебя не устраивает?

Добавлено через 2 минуты и 24 секунды
может все-таки ты перепутал курсы? Если ты уверен, что тебе это все-таки нужно, то предлагаю начать с того, чтобы найти инофрмацию, что такое бинарные данные и с чем их едят. Второе, предлагаю запустить Студию от МС и в отладчике посмотреть, что тебе в файл запишется/прочитается.

Автор: azesmcar 14.4.2010, 13:21
Цитата(m9yt @  14.4.2010,  13:17 Найти цитируемый пост)
У нас лаба такая.Как я буду выполнять удаление элементов, если я даже не вижу их отображение.

зависит от того, как ты смотришь..повторюсь, если notepad-ом то не увидишь..посмотри любым hex viewer-ом..в Visual Studio есть такая возможность, или скачай из интернета, их там полно.

Автор: m9yt 14.4.2010, 13:30
InvalidProperty, просто в текстовике вижу типа такого: NUL NUL ....и т.д..кусок моей строки...и т.д.

Автор: azesmcar 14.4.2010, 13:31
m9yt

Повторяю, ты смотришь бинарные данные текстовым редактором. 

Автор: m9yt 14.4.2010, 13:35
azesmcar, спасибо, я разобрался, что так я ничего не увижу.думаю, нужно другую функцию для записи применить, fprintf например...

Автор: azesmcar 14.4.2010, 13:39
Цитата(m9yt @  14.4.2010,  13:35 Найти цитируемый пост)
azesmcar, спасибо, я разобрался, что так я ничего не увижу.думаю, нужно другую функцию для записи применить, fprintf например... 

Ты для начала разберись что тебе нужно сделать. Тебе файл в бинарном виде нужен или в текстовом? В каком виде ты хочешь хранить данные? В каком виде ты их хочешь увидеть в файле?

Автор: m9yt 14.4.2010, 13:42
Цитата(azesmcar @ 14.4.2010,  13:39)
Цитата(m9yt @  14.4.2010,  13:35 Найти цитируемый пост)
azesmcar, спасибо, я разобрался, что так я ничего не увижу.думаю, нужно другую функцию для записи применить, fprintf например... 

Ты для начала разберись что тебе нужно сделать. Тебе файл в бинарном виде нужен или в текстовом? В каком виде ты хочешь хранить данные? В каком виде ты их хочешь увидеть в файле?

Нужно хранить в текстовом файле и видеть как текст.

Автор: azesmcar 14.4.2010, 13:45
m9yt

На си или на C++, вижу в заголовке написано Си, но программа у тебя на C++ написана, во всяком случае первые 3 строчки.

Автор: Ozerich 14.4.2010, 13:48
У тебя С++ используется, а не С.
Вот рабочий код на С.

Код

#include "stdio.h"

struct student
{
    char * family;
    int year;
};

void main()
{
    student a;
    a.family=" Ivanov";
    a.year=29;     
    FILE *f;
    f=fopen("myfile.txt", "wb"); 
    fprintf(f,"%d %s", a.year, a.family);
    fclose(f);
}



Автор: m9yt 14.4.2010, 13:53
Цитата(azesmcar @ 14.4.2010,  13:45)
m9yt

На си или на C++, вижу в заголовке написано Си, но программа у тебя на C++ написана, во всяком случае первые 3 строчки.

Мне не важно, на коком языке написано все остальное.Главное, применить функции из С для чтения\записи файлов.Остальные функции я могу и на С++ написать.

Добавлено через 1 минуту и 17 секунд
Ozerich, ты уже тут))))Быстро ты)))

Автор: azesmcar 14.4.2010, 14:01
Цитата(m9yt @  14.4.2010,  13:53 Найти цитируемый пост)
Мне не важно, на коком языке написано все остальное.Главное, применить функции из С для чтения\записи файлов.Остальные функции я могу и на С++ написать.

тогда так

Код

#include <stdio.h>

struct student
{
    char family[10];
    int year;
};

int main()
{
    FILE *f;
    struct student a;
    strcpy(a.family, "Ivanov");
    a.year = 29;     
    f = fopen("c:\\myfile.txt", "w"); 
    fprintf(f,"%d %s", a.year, a.family);
    fclose(f);
    return 0;
}

немного подправил код Ozerich.

Автор: m9yt 14.4.2010, 14:06
Всем спасибо.

Автор: borisbn 14.4.2010, 14:49
простите за offtopic
m9yt, прикольный у тебя student получился. то ли ему 29 лет, то ли он 29-го года рождения smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)