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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.04.2013, 15:59   #1
marina12
Пользователь
 
Регистрация: 13.02.2013
Сообщений: 28
По умолчанию ошибка в массиве строк

Здравствуйте!
Попыталась написать код программы,которая сортирует строки в файле (оканчивающиеся символом перевода строки) с помощью метода пузырька.(Память под содержимое файла распределять динамически).
Код:
 
#include <stdlib.h>
#include <string.h>
int _tmain(int argc, _TCHAR* argv[])
{
    FILE *fin;
    fin=fopen("Input.txt","r");
    char *darr;
    int n;
    int count=0;
    char c;
    fseek(fin,0,SEEK_END);
    int fsize=ftell(fin); 
    fseek(fin,0,SEEK_SET);
    if (!(darr=(char*)calloc(fsize,sizeof(char))))
    {
        fprintf(stderr,"osibka raspredeleniya pamyati!\n");
    }
    if (fin==NULL)
    {
        fprintf(stderr,"oshibka otkrutiya faila dlya chteniya\n");
    }
    while (!feof(fin))
    {
        if ((c=fgetc(fin))=='\n' || c==EOF)
        {
            count++; //количество строк
        }
    }
    for(int i = 0; i < count; i++)
    {
        if (strcmp(darr[n],darr[n+1]) > 0)
        {
                strcpy(darr[n+1], darr[n]);
                strcpy(darr[n], darr[n + 1]);
        }
    }
    fclose(fin);
    return 0;
}
Но в строчках 32-35 подчеркивает имя массива,ссылаясь на не тот тип. Как я поняла,ошибка в том,что я неправильно создала массив.Подскажите пожалуйста, как исправить.
marina12 вне форума Ответить с цитированием
Старый 18.04.2013, 16:12   #2
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,680
По умолчанию

Скажите, Вы для индексации массива darr используете переменную n, а в цикле используете i. Так чему равно n?
Может вы имели в виду
Код:
int i;
for(i = 0; i < count; i++)
    {
        if (strcmp(darr[i],darr[i+1]) > 0)
        {
                strcpy(darr[i+1], darr[i]);
                strcpy(darr[i], darr[i + 1]);
        }
    }
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!

Последний раз редактировалось Bugrimov; 18.04.2013 в 16:14.
Bugrimov вне форума Ответить с цитированием
Старый 18.04.2013, 20:54   #3
Son Of Pain
Участник клуба
 
Регистрация: 23.12.2010
Сообщений: 1,129
По умолчанию

Ты создала массив из символов, в который прочитается весь файл целиком (когда-то в будущем, возможно, пока в коде этого нет). А сравнивать пытаешься отдельные строки.
Son Of Pain вне форума Ответить с цитированием
Старый 19.04.2013, 13:10   #4
marina12
Пользователь
 
Регистрация: 13.02.2013
Сообщений: 28
По умолчанию

Цитата:
Сообщение от Son Of Pain Посмотреть сообщение
Ты создала массив из символов, в который прочитается весь файл целиком (когда-то в будущем, возможно, пока в коде этого нет). А сравнивать пытаешься отдельные строки.
То есть, чтобы создать массив из строк нужно использовать указатель на указатель? (char **darr)
marina12 вне форума Ответить с цитированием
Старый 20.04.2013, 09:48   #5
Son Of Pain
Участник клуба
 
Регистрация: 23.12.2010
Сообщений: 1,129
По умолчанию

Да, это один из способов.
Son Of Pain вне форума Ответить с цитированием
Старый 20.04.2013, 10:04   #6
Че Гевара
Форумчанин
 
Аватар для Че Гевара
 
Регистрация: 25.09.2012
Сообщений: 182
По умолчанию

Создай отдельно массив строк и массив указателей, и присвой адрес каждой строки своему указателю. А дальше сортируй указатели.
Отладка кода вдвое сложнее, чем его написание. Так что если вы пишете код настолько умно, насколько можете, то вы по определению недостаточно сообразительны, чтобы его отлаживать.
Brian W. Kernighan.

Последний раз редактировалось Че Гевара; 20.04.2013 в 10:09.
Че Гевара вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
добавление строк в динамическом массиве Ioane Visual C++ 1 19.02.2012 17:57
Перестановка строк в двухмерном массиве GoldSieg Паскаль, Turbo Pascal, PascalABC.NET 4 10.11.2011 13:38
Циклический сдвиг строк в многомерном массиве. Corvette Общие вопросы C/C++ 12 29.08.2011 22:05
Поиск строки в массиве строк C++ KuckaMAXHATKA Помощь студентам 0 19.02.2011 15:52
Удалени строк в массиве. в си Денни Помощь студентам 23 13.07.2010 09:27