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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.12.2009, 13:54   #1
Serjuk
Форумчанин
 
Регистрация: 06.08.2009
Сообщений: 136
По умолчанию динамическая память в си

Здравствуйте,вообщем встала проблема использования динамической памяти выделяемой для массива и вывода этого массива из файла.Из файла нужно вывести 1 строку ( кол-во элементов содержащихся в массиве(n)) и 2 строку(собственно сам массив - который может быть 3 видов float,int,char)и после этого выделить под него динамическую память функцией malloc,если массив не задан,то ввод с экрана.После получения массива отсортировать эти элементы методом пузырька,собственно не совсем понимаю действие strcmp(которая должна сортировать 2 строки)
Прилагаю свой код:
Код:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(int argc, char *argv[])
{
  FILE *fp;
  char ch;

  if(argc!=2) {
    printf("Вы забыли ввести имя файла.\n");
    exit(1);
  }

  if((fp=fopen(argv[1], "r"))==NULL) {
    printf("Ошибка при открытии файла.\n");
    exit(1);
  }
printf("ввод с клавиатуры\n");
char a[N][M];
    int n,i;
    scanf("%d",&n);
    a = (int*) malloc(sizeof(int)*n);

    for (i=0;i<n;i++)
       scanf("%s", &a[i]);
      for (i=0;i<n;i++)
      if((a[i] = malloc(sizeof(int)*n))==NULL) {
      printf("Ошибка при распределении  памяти\n");
      exit(1);  return a;
    }

    if (isalpha(a[0]){
   for (i=0;i<n;i++){
   for(j=0;j<n;j<n-i-1;j++){
       if(strcmp(a[j]>strcmp(a[j+1])){
             int tmp = strcmp(a[j]); strcmp(a[j]) = strcmp(a[j+1]) ; strcmp(a[j+1]) = tmp;
           }
        }
    }

    }
    for (i=0;i<n;i++)
       printf("%s",a[i],"\n");

    else{
    for(i = 0 ; i < n ; i++) {
       // сравниваем два соседних элемента.
       for(j = 0 ; j < n - i - 1 ; j++) {
           if(a[j] > a[j+1]) {
              // если они идут в неправильном порядке, то
              //  меняем их местами.
              int tmp = a[j]; a[j] = a[j+1] ; a[j+1] = tmp;
           }
        }
    }
    }
    for (i=0;i<n;i++)
       printf("%s",a[i],"\n");

free(a);
 getchar();
 getchar();
 }

 
  fclose(fp);
вопрос собственно:как задать любой файл - как из него вытащить первую строку(кол-во элементов в массиве),вторую строчку(сам массив) и сделать этот массив динамическим. причем чтобы этот файл был указан при запуске из командной строки,т.е. с использование командных аргументов - например,myprog имя_файла_с_данными, если файл не указан то ввод с клавиатуры..Помогите пожалуйста)
Serjuk вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамическая память!!! Doholyan Паскаль, Turbo Pascal, PascalABC.NET 12 30.06.2009 17:11
динамическая память aka_faith Общие вопросы C/C++ 47 12.06.2009 12:35
Динамическая память. Пaвeл Помощь студентам 16 31.05.2009 21:16
Динамическая память liver1981 Общие вопросы C/C++ 5 22.04.2009 09:16
Динамическая память MadDog__ Помощь студентам 2 22.11.2007 00:05