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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
ozzy_b
2 / 2 / 0
Регистрация: 02.10.2012
Сообщений: 169
#1

Криво пишет даные в файл - C++

04.12.2012, 23:11. Просмотров 409. Ответов 11
Метки нет (Все метки)

Надо через структуры записать даные в файл. Компилюю, ввожу даные, записивает, открываю то что записал а там какието "иероглифы". В чем проблема? Как мне потом етот файл использовать, например для чтения в том же компиляторе? ВВожу токо английские буквы.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <iostream>
#include <stdio.h>
#include <math.h>
#include <conio.h>
using namespace std;
const int m=3;
struct good
{
    char name[10];
    char type_count[10];
    char sort[10];
    int count;
    int price;
};
void inp(good []);
void write(good []);
 
int main()
{
    good goods[m];
    inp(goods);
    
    getch();
}
void inp(good goods[m])
{
     cout<<"\n************************\n\tInput\n************************"<<endl;
     
        for(int i=0; i<m; i++)
        {
            cout<<"Input name: "<<i+1<<" ";
            cin>>goods[i].name;
            cout<<"Input type count: "<<i+1<<" ";
            cin>>goods[i].type_count;
            cout<<"Input sort: "<<i+1<<" ";
            cin>>goods[i].sort;
            cout<<"Input count: "<<i+1<<" ";
            cin>>goods[i].count;
            cout<<"Input price: "<<i+1<<" ";
            cin>>goods[i].price;
        }
        cout<<endl;
        write(goods);
}
void write(good goods [m])
{
    FILE *f;
    f=fopen("D:\\Food.txt", "w");
    for(int i=0; i<m; i++)
    {
        fprintf (f, "%c", goods[i].name);
        fprintf (f, "%c", goods[i].type_count);
        fprintf (f, "%c", goods[i].sort);
        fprintf (f, "%d", goods[i].count);
        fprintf (f, "%d", goods[i].price);
    }
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
BoBaH26
30 / 30 / 0
Регистрация: 02.12.2010
Сообщений: 255
04.12.2012, 23:30     Криво пишет даные в файл #2
Точно не уверен, но может быть, потому, что ты при каждом проходе цикла (для кол-ва записей) пробуешь занести в файл символьный массив, чего делать нельзя, ввод и вывод массивов происходит в цикле, т.е нужно для вывода организовать еще 3 цикла для .name, .type_count, .sort. А .count и .price он у тебя правильно выводит? ПО крайней мере должен правильно выводить.
ozzy_b
2 / 2 / 0
Регистрация: 02.10.2012
Сообщений: 169
04.12.2012, 23:32  [ТС]     Криво пишет даные в файл #3
BoBaH26, немного понял суть, но что конкретно сделать не знаю
Wolkodav
601 / 454 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
04.12.2012, 23:35     Криво пишет даные в файл #4
Создай функцию, которая принимает на вход структуру и файла (палюбе только файл иначе там могут возникнуть проблемы). Она пускай и выводит в файл твою структуру. Но только один объект структуры. Выводит можно функцией fputs(f,str), f-файл, str-выводимая строка. Можно и fprintf, если что то она может выводить const* char( т.е. массивы чаровские).
ozzy_b
2 / 2 / 0
Регистрация: 02.10.2012
Сообщений: 169
04.12.2012, 23:37  [ТС]     Криво пишет даные в файл #5
Wolkodav, блин, я не понимаю как ето сделать, уже ночь у меня, а мне завтра сдавать ету чертову лабараторку((
Wolkodav
601 / 454 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
04.12.2012, 23:44     Криво пишет даные в файл #6
10 мин жди. Щя помогу
ozzy_b
2 / 2 / 0
Регистрация: 02.10.2012
Сообщений: 169
04.12.2012, 23:44  [ТС]     Криво пишет даные в файл #7
Wolkodav, спасибо)
BoBaH26
30 / 30 / 0
Регистрация: 02.12.2010
Сообщений: 255
04.12.2012, 23:47     Криво пишет даные в файл #8
C++
1
2
3
4
5
6
7
8
9
10
11
for(int i=0; i<m; i++)
    {
        for (int k=0;i<strlen(goods[i].name);k++)
             fprintf (f, "%c", goods[i].name[k]);
        for (int k=0;i<strlen(goods[i].type_count);k++)
             fprintf (f, "%c", goods[i].type_count[k]);
        for (int k=0;i<strlen(goods[i].sort);k++)
             fprintf (f, "%c", goods[i].sort[k]);
        fprintf (f, "%d", goods[i].count);
        fprintf (f, "%d", goods[i].price);
    }
Вот измени так цикл вывода. Попробуй, но точно не гарантирую, не набирал, просто как-то таким образом сам делал.
ozzy_b
2 / 2 / 0
Регистрация: 02.10.2012
Сообщений: 169
04.12.2012, 23:53  [ТС]     Криво пишет даные в файл #9
BoBaH26, ошибкаКриво пишет даные в файл
BoBaH26
30 / 30 / 0
Регистрация: 02.12.2010
Сообщений: 255
05.12.2012, 00:05     Криво пишет даные в файл #10
ВСЕ! Я не увидел ошибку сразу. Возвращай свой старый вариант, но вместо %c при выводе указывай %s. Т.е.
C++
1
2
3
4
5
6
7
8
for(int i=0; i<m; i++)
    {
        fprintf (f, "%s", goods[i].name);
        fprintf (f, "%s", goods[i].type_count);
        fprintf (f, "%s", goods[i].sort);
        fprintf (f, "%d", goods[i].count);
        fprintf (f, "%d", goods[i].price);
    }
И, пожалуйста, поставь табуляцию, читать невозможно))

Добавлено через 22 секунды
У тебя строка, а не символ))
ozzy_b
2 / 2 / 0
Регистрация: 02.10.2012
Сообщений: 169
05.12.2012, 00:15  [ТС]     Криво пишет даные в файл #11
BoBaH26, о, спасибо большое, теперь записало, хоть все в кучу, но ето надо табуляцию поправить. А если мне надо будет взять даные из файла то оно прочитает все верно, ну всмысле с++ увидит где такойто елемент структуры, или для него етот файл просто текстовый документ?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.12.2012, 00:38     Криво пишет даные в файл
Еще ссылки по теме:

C++ Пишет в файл калябаляку
C++ файлы с++ квадраты считает а в файл не пишет
Почему не пишет файл? C++
C++ Fwprintf не пишет данные wchar_t в файл
Dev-C++ при отладке пишет "файл не скомпилирован" C++

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

Или воспользуйтесь поиском по форуму:
BoBaH26
30 / 30 / 0
Регистрация: 02.12.2010
Сообщений: 255
05.12.2012, 00:38     Криво пишет даные в файл #12
Увы, нет. Если хочешь, чтобы он читал информацию и структурировал ее, размещай данные отдельно, иначе это просто предложение. Просто выводи данные с переводом каретки на новую строку. А потом считывай в нужном порядке
Yandex
Объявления
05.12.2012, 00:38     Криво пишет даные в файл
Ответ Создать тему
Опции темы

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