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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.05.2013, 22:23   #1
Kruudash
Новичок
Джуниор
 
Регистрация: 12.05.2013
Сообщений: 1
По умолчанию Запись "0" в поле int в Структуре (Си)

Здравствуйте. Возникла следующая проблема.
Работаю с файлом. Произвожу запись структур в этот файл. В структуре есть два поля типа int. Если во время заполнения этих полей я присваиваю им значение 0, то во время вывода структуры на экран в этих полях ничего не отображается. Просто пустое значение. Такое чувство, как будто при вводе 0 компилятор думает, что я пропускаю данное поле и не записывает в него значение. Запись - строка 68. Ф-ия заполнения полей - 107 строка

Код:
#include<stdio.h>
#include<conio.h>
#include<iostream>
#include<string.h>
#include<ctype.h>
 
struct Scoreboard{
    char first_club[22];
    char second_club[22];
    int first_club_score;
    int second_club_score; 
    char game_best_ftb[20];
    char winner_club[22];
    int day, month, year;
};
 
void Scoreboard_menu();
void EnterScoreboard(Scoreboard *board_arr, int i);
void s_write();
void s_read();

int main()
{
setlocale(LC_CTYPE,"Russian");
Scoreboard_menu();
}
 
void Scoreboard_menu()
{
system("cls");
printf("Меню турнирной таблицы:\n");
printf("1. Просмотр данных\n");
printf("2. Добавление данных\n");
printf("Введите номер меню: ");
char n; //переменная для меню
scanf("%s",&n);
if(!isdigit(n))
{
    printf("Вы ввели не цифру, попробуйте ещё раз.....");
    getch();
    Scoreboard_menu();
}
 
switch(n)
{
case '1':s_read();
    break;
case '2':s_write();
    break;
default:
printf("\nОшибка. Попробуйте ещё раз.....\n");
getch();
Scoreboard_menu();
}
Scoreboard_menu();
}
 
 
void s_write()
{
    int amount;
    printf("Введите кол-во сыгранных игр, которые вы хотите записать в турнирную таблицу -> ");
    scanf("%i",&amount);
    Scoreboard board_arr;
 
    FILE *fp;
 
    if ((fp=fopen("scoreboard","ab")) == NULL)
        printf("Файл невозможно создать\n");
    else
    {
        for (int i=0; i<amount; i++)
        {
            EnterScoreboard(&board_arr, i); //Вот, собственно запись в файл. В самом конце кода находится ф-ия заполнения структуры
            fwrite(&board_arr, sizeof(Scoreboard), 1, fp);
 
        }
    }
    fclose(fp);
    getch();
}
 
 
void s_read()
{
    FILE *fp;
 
    if ((fp=fopen("scoreboard","rb")) == NULL)
        printf("Файл не найден\n");
    else
    {
        fseek(fp, 0, SEEK_END);
        int size = ftell(fp);
        size /= sizeof(Scoreboard);
        Scoreboard *b_arr = new Scoreboard[size];
        rewind(fp);
        fread(b_arr, sizeof(Scoreboard), size, fp);
        fclose(fp);
 
        printf("\n--------------------------------------------------\n");
        printf("Ниже представлена турнирная таблица\n");
        printf("--------------------------------------------------\n\n\n");
        printf("|     Первый клуб      |Кол-во голов|      Второй клуб     |Кол-во голов|   Победивший Клуб    |   Лучший футболист   |    Дата  |\n");
        printf("|%22.0s|%12.0s|%22.0s|%12.0s|%22.0s|%22.0s|%10.0s|\n");
        for(int i=0; i<size; i++)
            printf("|%22.22s|%12.0i|%22.22s|%12.0i|%22.20s|%22.22s|%2.0i.%2.0i.%4.0i|\n", b_arr[i].first_club, b_arr[i].first_club_score, b_arr[i].second_club, b_arr[i].second_club_score, b_arr[i].winner_club, b_arr[i].game_best_ftb,b_arr[i].day,b_arr[i].month,b_arr[i].year);            
    
    }
    getch();        
}
 
 
void EnterScoreboard(Scoreboard *board_arr, int i)
{
    getchar();
    printf("\nВведите название первого футбольного клуба -> ");
    gets(board_arr -> first_club);
    printf("Введите название второго футбольного клуба -> ");
    gets(board_arr -> second_club);
 
    printf("Введите кол-во голов первой команды -> ");
    scanf("%i",&board_arr -> first_club_score);  //Вот эта строка
 
    printf("Введите кол-во голов второй команды -> ");
    scanf("%i",&board_arr -> second_club_score); //и эта
 
 
    getchar();
    printf("Введите имя лучшего футболиста игры -> ");
    gets(board_arr -> game_best_ftb);
 
    if(board_arr[i].first_club_score > board_arr[i].second_club_score)
                strcpy(board_arr->winner_club, board_arr->first_club);
            else 
            {
                if(board_arr[i].first_club_score < board_arr[i].second_club_score)
                    strcpy(board_arr->winner_club, board_arr->second_club);
                else strcpy(board_arr->winner_club, "Ничья");
            }
    
    printf("Введите дату, когда состоялась игра ( в числовой интерпретации )\n");
    printf("Введите день -> ");
    scanf("%i",&(board_arr->day));
    printf("Введите месяц -> ");
    scanf("%i",&(board_arr->month));
    printf("Введите год -> ");
    scanf("%i",&(board_arr->year));
 
    printf("\n\n-------\n\n");
}
Kruudash вне форума Ответить с цитированием
Старый 24.05.2013, 00:24   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Используйте отладчик для уточнения того, с чем именно проблема. Мне сходу в глаза бросилось это:
Код:
        printf("|%22.0s|%12.0s|%22.0s|%12.0s|%22.0s|%22.0s|%10.0s|\n");
Удивлён, что после этого вызова программа не рухнула.
Abstraction вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
error C2664: PrintArray: невозможно преобразовать параметр 1 из "int **" в "const int **" revizor Помощь студентам 6 07.05.2013 14:07
Неявное преобразование типа "string" в "int" невозможно artscorp C# (си шарп) 4 10.02.2013 20:59
Какова разница между "int** &a" и "int** a" в кач-ве параметра функции? dollemika Помощь студентам 3 15.01.2012 17:16
C++, препроцессор, как из "int" сделать "char"? Максай Помощь студентам 3 05.09.2008 08:16
Excel файл открывается не "до конца" (странички "не показываются" только серое поле) Dorvir Microsoft Office Excel 2 28.03.2008 10:03