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

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

Войти
Регистрация
Восстановить пароль
 
AfoTax
0 / 0 / 0
Регистрация: 05.12.2011
Сообщений: 37
#1

Строки и бинарные файлы - C++

24.01.2012, 00:21. Просмотров 430. Ответов 6
Метки нет (Все метки)

Программа читает из бинарного файла и выводит содержимое на экран. Потом можно добавить 1 элемент в любую ячейку.
Проблема в том, что при выводе на экран, оно выводит 1 первый символ строки, а затем каракули.
Вот код самой проги:
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#include<stdio.h>
#include<stdlib.h>
                                                            // Функции
int getFileSize(FILE *f);
int getElementAtPosition(int ,FILE* );
void setFileElements(int ,char ,FILE* );
void print_file(FILE *f);
                                                            // main
void main()
{
    FILE *f1;
    int n1;
    char n[11];
    if(!(f1=fopen("mychisla.bin","r+b")))
    {
        puts("can't create file");
        exit(0);
    }
    puts("\Soderzanie faila:");
    print_file(f1);
 
    puts("\nKolichestvo elementov:");
    printf("%d\n",getFileSize(f1));
 
    puts("\nVvedite element kotorii hotite pomestit v file: ");
    scanf("%s",&n);
 
    puts("\nVvedite kuda vstavit element: ");
    scanf("%d",&n1);
 
    setFileElements(n1,*n,f1);
    puts("\nSOderzanie faila:");
    
    print_file(f1);
    fclose(f1);
}
                                                            //Get file size
int getFileSize(FILE *f)
{
    fseek(f,0* sizeof(char),SEEK_END);
    int n=ftell(f)/sizeof(char);
    printf("ftell=%d\n",n);
    return n;
}
                                                            // Position
int getFileAtPosition(int i,FILE *f)
{
    int buf;
    fseek(f,i*sizeof(int),SEEK_SET);
    fread(&buf, sizeof(int),1,f);
 
    return buf;
}
                                                            // Printf file
void print_file(FILE*f)
{
    int n=getFileSize(f);
    fseek(f,0*sizeof(char),SEEK_SET);
 
    for(int i=0;i<n;i++)
    {
        char x[11];
        if(!fread(&x,sizeof(char),1,f)) break;
        printf("element #%d=%s\n",i,x);
    }
}
                                                            // set file elements
void setFileElements(int pos,char element,FILE*f)
{
    fseek(f,pos*sizeof(char),SEEK_SET);
    fwrite(&element, sizeof(char),1,f);
}
Добавлено через 8 часов 40 минут
Неужели это всё так сложно_О
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.01.2012, 00:21     Строки и бинарные файлы
Посмотрите здесь:

Бинарные файлы c++ - C++
Здравствуйте. Нужно в бинарный файл записать строку (нового стиля), единственное что известно, так это то, что в строке не более 16...

Бинарные файлы - C++
В файле содержатся числа. Сформировать из них матрицу, содержащую пять элементов в строке. Лишние числа отбросить. Вывести на печать...

Бинарные файлы - C++
Всё началось с необходимости наличия программы, в которую вводишь число и она говорит есть ли такое в файле(мне кажется удобнее...

бинарные файлы - C++
доброго времени суток. очень нужна помощь по нескоьким задачам. именно помощь, а не решение за меня) спасибо, если кто откликнется. ...

Fstream и бинарные файлы - C++
Необходимо скопировать картинку. Не знаю как сделать.

Бинарные файлы данных - C++
Доброго времени суток, господа) извольте помочь мне с кодом):senor: Задание: Есть бинарный файл Ф1 с целыми числами:10 отрицательных...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
NoMasters
Псевдослучайный
1747 / 1090 / 71
Регистрация: 13.09.2011
Сообщений: 3,120
24.01.2012, 00:34     Строки и бинарные файлы #2
У тебя формат %s, а вывести надо только один символ. %c же //зачем х вообще массив?
retmas
Жарю без масла
859 / 741 / 164
Регистрация: 13.01.2012
Сообщений: 1,694
24.01.2012, 00:38     Строки и бинарные файлы #3
ошибка у вас тут:
Цитата Сообщение от AfoTax Посмотреть сообщение
C++
1
2
3
                char x[11];
                if(!fread(&x,sizeof(char),1,f)) break;
                printf("element #%d=%s\n",i,x);
подумайте, куда вы вводите.
да и что выводите
AfoTax
0 / 0 / 0
Регистрация: 05.12.2011
Сообщений: 37
24.01.2012, 01:52  [ТС]     Строки и бинарные файлы #4
Цитата Сообщение от NoMasters Посмотреть сообщение
У тебя формат %s, а вывести надо только один символ. %c же //зачем х вообще массив?
Мне нужно вводить и выводить не по 1 символу, а целой строкой.
NoMasters
Псевдослучайный
1747 / 1090 / 71
Регистрация: 13.09.2011
Сообщений: 3,120
24.01.2012, 01:58     Строки и бинарные файлы #5
тогда выкинь свой цикл и читай сколько надо сразу, а потом руками ставь завершающий строку нулевой символ.
AfoTax
0 / 0 / 0
Регистрация: 05.12.2011
Сообщений: 37
24.01.2012, 02:03  [ТС]     Строки и бинарные файлы #6
Извиняюсь за неточные данные. Забыл что программа для первичного создания и ввода файла у меня была отдельно =)
Вот исправленный код:
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#include<stdio.h>
#include<stdlib.h>
                                                            // Функции
int getFileSize(FILE *);
int getElementAtPosition(int ,FILE* );
void setFileElements(int ,char* ,FILE* );
void print_file(FILE *f);
void create(void);
                                                            // main
void main()
{
    create();
    FILE *f1;
    int n1;
    char n[11];
    if(!(f1=fopen("mychisla.bin","r+b")))
    {
        puts("can't create file");
        exit(0);
    }
    puts("\Soderzanie faila:");
    print_file(f1);
 
    puts("\nKolichestvo elementov:");
    printf("%d\n",getFileSize(f1));
 
    puts("\nVvedite element kotorii hotite pomestit v file: ");
    scanf("%s",&n);
    
    puts("\nVvedite kuda vstavit element: ");
    scanf("%d",&n1);
 
    setFileElements(n1,&n[0],f1);
    puts("\nSOderzanie faila:");
    
    print_file(f1);
    fclose(f1);
}
void create(void)
{
    FILE *k;
    if(!(k=fopen("mychisla.bin","wb")))
    {
        puts("Error\n");
        exit(0);
    }
    char name[22];
    printf("enter str\n");
    scanf("%s",name);
    while(!feof(stdin))
    {
        fwrite(&name,sizeof(char),1,k);
 
        printf("enter str\n");
        scanf("%s",name);
    }
    fclose(k);
}
                                                            //Get file size
int getFileSize(FILE *f)
{
    fseek(f,0* sizeof(char),SEEK_END);
    int n=ftell(f)/sizeof(char);
    printf("ftell=%d\n",n);
    return n;
}
                                                            // Position
int getElementAtPosition(int i,FILE *f)
{
    int buf;
    fseek(f,i*sizeof(int),SEEK_SET);
    fread(&buf, sizeof(int),1,f);
 
    return buf;
}
                                                            // Printf file
void print_file(FILE*f)
{
    int n=getFileSize(f);
    fseek(f,0*sizeof(char),SEEK_SET);
 
    for(int i=0;i<n;i++)
    {
        char x[11];
        if(!fread(&x,sizeof(char),1,f)) break;
        printf("element #%d=%s\n",i,x);
    }
}
                                                            // set file elements
void setFileElements(int pos,char* element,FILE*f)
{
    fseek(f,pos*sizeof(char),SEEK_SET);
    fwrite(element, sizeof(char),1,f);
}
Добавлено через 3 минуты
Цитата Сообщение от NoMasters Посмотреть сообщение
тогда выкинь свой цикл и читай сколько надо сразу, а потом руками ставь завершающий строку нулевой символ.
Неполучится =( Это часть моего проекта к зачету в универе) Надо чтобы всё было правильно)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.01.2012, 02:05     Строки и бинарные файлы
Еще ссылки по теме:

Текстовые и бинарные файлы - C++
Расскажите, пожалуйста, когда лучше использовать текстовые файлы, а когда бинарные. Для каких данных один формат лучше другого? В каком...

Fstream и бинарные файлы - C++
вообщем вопрос такой.. как читать строки из бинарного файла, и как записывать в бинарный файл строки используя fstream, и можно ли...

Бинарные файлы и структуры - C++
Доброго времени суток. Прошу ответить на пару вопросов: 1) Почему результат операции sizeof, применённый к структуре, не совпадает с...

Запись в бинарные файлы - C++
Подскажите пожалуйста, я собираюсь записать из текстового файла в бинарный текст. Но в одних случаях записывается сплошной строкой, в...


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

Или воспользуйтесь поиском по форуму:
NoMasters
Псевдослучайный
1747 / 1090 / 71
Регистрация: 13.09.2011
Сообщений: 3,120
24.01.2012, 02:05     Строки и бинарные файлы #7
Ответ не изменился. Ты читаешь по одному символу в x[0] и пытаешься вывести массив как строку. При этом завершающего нуля в нём нет.
Yandex
Объявления
24.01.2012, 02:05     Строки и бинарные файлы
Ответ Создать тему
Опции темы

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