Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.12.2014, 00:22   #1
assapeo
Пользователь
 
Регистрация: 12.12.2014
Сообщений: 12
По умолчанию Переделать в бинарный режим [Си]

Здравствуйте! Написал программу, используя текстовый режим, всё работает. Но надо использовать бинарный режим, не получается. Подскажите, пожалуйста, как исправить?
Код:
#include <stdio.h>
#include <stdlib.h>
 
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
 
int main(int argc, char *argv[]) {
    int x, y;
    typedef struct {
        char player[20];
        char goals[20]; 
        char assists[20]; 
        char cards[20]; 
    }
    football;
    football A[100];
    printf("Number of players: ");
    scanf("%d",&y);
    for (x=0; x<y;x++) {
        printf("\nPlayers surname: ");
        scanf("%s", &A[x].player);
        printf("Number of goals: ");
        scanf("%s", &A[x].goals);
        printf("Number of assists: ");
        scanf("%s", &A[x].assists);
        printf("Number of cards:");
        scanf("%s", &A[x].cards);
    }
    const char fname[50]="abc.dat";
        FILE *fp;
        fp=fopen(fname,"wb");
        if (fp != NULL) {
        fwrite(A,sizeof(football),y,fp);
            fclose(fp);
        }
        return 0;
}

Последний раз редактировалось assapeo; 12.12.2014 в 00:26.
assapeo вне форума Ответить с цитированием
Старый 12.12.2014, 07:58   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А что не получается? Ошибки? Файл не сохраняется?
Представленная программа с первого взгляда верная.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.12.2014, 14:24   #3
assapeo
Пользователь
 
Регистрация: 12.12.2014
Сообщений: 12
По умолчанию

Разве это бинарный файл?
assapeo вне форума Ответить с цитированием
Старый 12.12.2014, 14:38   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Ну так вы строки читаете и пишите. Естественно, что хоть в бинарном, хоть в текстовом они писаться будут почти одинаково...
p51x вне форума Ответить с цитированием
Старый 12.12.2014, 14:45   #5
assapeo
Пользователь
 
Регистрация: 12.12.2014
Сообщений: 12
По умолчанию

Мне казалось, что в бинарном файле символы будут такие, что не понять, что там написано, открывая файл через блокнот. Не могли бы сказать, почему не работает вторая программа? Её тоже надо в бинарный режим переделать.
Код:
#include <stdio.h>
#include <stdlib.h>
 
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
 
int main(int argc, char *argv[]) {
    const char fname[32]="abc.dat";
    int i=0, z=0, m=0;
    typedef struct {
        char player[20];
        char goals[20];
        char assists[20];
        char cards[20];
    }
    football;
    football A[100];
    FILE *fp;
    fp=fopen(fname, "rb");
    if (fp==NULL) return 0;
    printf("All players");
    m=fread(A,sizeof(football),100,fp);
    return m;
    //while (!feof(fp)) {
    //  fscanf(fp, "%s %s %s %s\n", A[z].d , A[z].p , A[z].k , A[z].s); z++;}
        
        
        for (i=0; i<4; i++) {
            
        printf("\n %s", A[i].player) ;}
        char k2[50]="";
        printf("\n\nWrite players name to get information about him:");
        scanf ("%s",&k2);
            for (i=0; i<z; i++) {
                if (strcmp(A[i].player, k2) == 0){
                    printf("\nPlayers surname: %s\n Number of goals: %s\n Number of assists: %s\n Number of cards: %s\n", 
 A[i].player, A[i].goals, A[i].assists, A[i].cards);}
                }
                system("pause");
            return 0;
                }
assapeo вне форума Ответить с цитированием
Старый 12.12.2014, 14:45   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Разве это бинарный файл?
А чего ты ждешь? Открой любой бинарный файл, где присутствует обычный текст. Тот же ЕХЕ файл, в нем в ресурсах к примеру найдешь много строк разных.
Цитата:
Её тоже надо в бинарный режим переделать.
А чем этот вариант не устраивает?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.12.2014, 15:06   #7
assapeo
Пользователь
 
Регистрация: 12.12.2014
Сообщений: 12
По умолчанию

Тем, что не работает.
assapeo вне форума Ответить с цитированием
Старый 12.12.2014, 15:08   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А ты проверял? )
Сразу видно что нет.
Вот обьясни что у тебя return m в середине программы делает?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.12.2014, 15:17   #9
assapeo
Пользователь
 
Регистрация: 12.12.2014
Сообщений: 12
По умолчанию

Что проверял? Работает ли программа? Странный вопрос. А по поводу return m. У меня были примеры, как делать в текстовом и бинарных режимах, но их не достаточно было, чтобы я понял. Если можете, то объясните как подправить программу.
Вот те примеры, если интересно:
Текстовый режим:
Код:
void SavePoints(Point *mas, int count, 
char *fname){
    
    int i;
    FILE *fp;
    fp = fopen(fname, "w");
    if (fp != NULL)
      for (i=0; i<count; i++) {
      fprintf(fp,"%d %d\n",mas[i].x,mas[i].y);
        }
    fclose(fp);
}
Бинарный:
Код:
void SavePointsBin(Point *mas, int count,
char *fname){
 
    int i;
    FILE *fp;
    fp = fopen(fname, "wb");
    if (fp != NULL)
    fwrite(mas, sizeof(Point), count, fp);
    fclose(fp);
}
Текстовый:
Код:
int LoadPoints(Point *mas, char *fname) {
	int i=0;
	FILE *fp;
	fp = fopen(fname, "r");
	if (fp == NULL) return 0;
	while (!feof(fp)) {
		fscanf(fp, "%d %d\n", 
			&mas[i].x, &mas[i].y);
		i++;
	}
	return i;
}
Бинарный:
Код:
int LoadPointsBin(Point *mas, char *fname) {
	int i=0;
	FILE *fp;
	fp = fopen(fname, "rb");
	if (fp==NULL) return 0;
	i = fread(mas, sizeof(Point), 100, fp);
	return i;
}
assapeo вне форума Ответить с цитированием
Старый 12.12.2014, 15:24   #10
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,679
По умолчанию

Все понятно... Нужно все писать заново После return m программа уже не выполняется, ну на сколько я вижу.
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C++, задача на бинарный файл (Бинарный файл состоит из записей по 5 бит) zaitsevmishka Помощь студентам 3 16.05.2014 21:39
бинарный поиск. алексей2011 Помощь студентам 0 01.07.2011 04:32
Бинарный файл Хитман Помощь студентам 1 27.03.2011 19:04
Бинарный поиск Виктория7777 Помощь студентам 6 13.01.2011 16:07
С++ бинарный оператор nadin777 Помощь студентам 1 27.01.2010 13:58