Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Массив структур массивов, Прошу помощи! 
:(
    Опции темы
BlackJohnnie
Дата 26.4.2012, 04:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 26.4.2012

Репутация: нет
Всего: нет



Доброго всем утра! 
Сразу извиняюсь за, скорее всего, не рациональное решение проблемы но:
1) требуется создать массив, состоящий из структур, в которых некоторые типы - массивы.
2) требуется считать данные из файла и тупо скопировать их в другой файл с помощью fprintf(конечно, мне не нужно копировать файл, но на данном этапе нужно понять, почему код виснет при исполнении)

Код


#include "stdafx.h"
#include <stdio.h>

int main()
{
    int i,k,m,n,q;
    struct ST {
        int Price[40];
        int Value[40];
    } arr[100];

    FILE *input;
    FILE *output;
    char* file_name_in = "train.txt";
    char* file_name_out = "out.txt";
    
    input = fopen (file_name_in, "r");
    output = fopen (file_name_out, "w");
    for (i=0;i<100;i++)
    {    
        for (k=0;k<40;k++)
        {    
            arr[i].Price[k] = 0;
            arr[i].Value[k] = 0;

        fscanf(input, "%d %d\n", arr[i].Price [k], arr[i].Value [k]);
        fprintf(output, "%d %d \n",arr[i].Price[k] ,arr[i].Value[k]); 
        }
    }
    
    fclose (input);
    fclose (output);
    return 0;
}





А этот код не виснет:

Код

#include "stdafx.h"
#include <stdio.h>

int main()
{
    int i,k,m,n,q;
    struct ST {
        int Price[40];
        int Value[40];
    } arr[100];

    FILE *input;
    FILE *output;
    char* file_name_in = "train.txt";
    char* file_name_out = "out.txt";
    
    input = fopen (file_name_in, "r");
    output = fopen (file_name_out, "w");
    for (i=0;i<100;i++)
    {    
        for (k=0;k<40;k++)
        {    
            arr[i].Price[k] = 0;
            arr[i].Value[k] = 0;
        fscanf(input, "%d %d\n", arr[i].Price, arr[i].Value);
        fprintf(output, "%d %d \n",arr[i].Price[k] ,arr[i].Value[k]); 
        }
    }
    
    fclose (input);
    fclose (output);
    return 0;
}



Разница только в том, тчо во втором случае нет индексов массивов в fscanf'е.
Помогите, пожалуйста!
Заранее спасибо!

PM MAIL   Вверх
disputant
Дата 26.4.2012, 06:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 210
Регистрация: 28.11.2011

Репутация: нет
Всего: 3



Что-то мне подсказывает, что в функцию fscanf после форматной строки надо передавать адреса, куда класть данные...

Код

fscanf(input, "%d %d\n", &arr[i].Price [k], &arr[i].Value [k]);


А во втором случае, убрав индексы, вы передали адреса первых элементов массивов. Вот оно и заработало smile

Это сообщение отредактировал(а) disputant - 26.4.2012, 06:58
PM MAIL   Вверх
BlackJohnnie
Дата 26.4.2012, 07:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 26.4.2012

Репутация: нет
Всего: нет



Спасибо! Действительно, отправляя в scanf адресса, получаем работающий код.
Но теперь другая проблма, уже по самому коду. В файл output программа сначала записывает верное предполагаемыое значение (для i=0 и k=0), а затем выводит два фиксированных значения для arr[i].Price[k] и для arr[i].Value[k], при этом нормально пробегая все возможные значения i и k.
PM MAIL   Вверх
disputant
Дата 26.4.2012, 09:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 210
Регистрация: 28.11.2011

Репутация: нет
Всего: 3



Гм, а что за файл вы ей подсовываете? 

Выходной файл должен по сути совпадать со входным, и у меня, когда я подсунул исправленной программе файл с 4000 парами значений по паре в строке, все прошло на ура...
Может, у вас входной файл не совсем...?
PM MAIL   Вверх
BlackJohnnie
Дата 26.4.2012, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 26.4.2012

Репутация: нет
Всего: нет



Спасибо большое! Действительно проблема в файле: в каждой строке после двух десятичных значений находится ещё и некоторые символы.
Ещё раз большое спасибо!
Проблема, решена)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0411 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.