Я новичок в C и пытаюсь закодировать программу для сортировки массивов символов, закорачивая массив указателей, указывающих на них (программа, как в D & K Язык программирования C pg -108). вот мой код-Программа C для сортировки массивов символов с использованием массива указателей
#include <stdio.h>
#include <string.h>
#define MAXLINES 5000
#define MAXLEN 100
char *line[MAXLINES];
int readlines(char *line[], int t);
void writelines(char *line[], int t);
void qsort(char *line[], int lo, int m);
int getline(char *, int);
char *alloc(int);
int partition(char *line[], int lo, int m);
int main()
{
int nlines; //no of input lines
if(nlines=readlines(line,MAXLINES)>=0)
{
qsort(line, 0, nlines-1);
writelines(line, nlines);
return 0;
}
else
{
printf("Error too many ");
return 1;
}
}
char store[10000]; //storage for alloc function
char *p = store;
char *alloc(int n) //next free position for allocating to the input lines
{
if (p + n <= store + 10000)
{
p += n;
return p - n;
}
else
return NULL;
}
int readlines(char *le[], int maxlines) //read the input lines to be sorted
{
char *p;
int i = 0;
char line[MAXLEN];
int len;
while ((len=getline(line,MAXLEN)) > 0)
{
if ((i >= maxlines)||((p = alloc(len)) == NULL))
{
return -1;
}
else
{
line[len - 1] = '\0';
le[i++] = p;
strcpy(p, line);
}
}
return i;
}
void writelines(char *line[], int t) /*function to print lines after
{ sorting */
for (int i = 0; i <= t - 1; i++)
printf("%s\n",line[i]);
}
int getline(char a[], int t) //function to read a line
{
int i = 0; //to count no of input char
int c;
while ((--t > 0) && (c = getchar()) != '\n'&&c != EOF)
a[i++] = c;
;
if (c== '\n')
a[i++]='\n';
a[i] = '\0';
return i;
}
void qsort(char *line[], int lo, int m) /*function to quick sort the pointer
{ array*/
if (lo >= m)
return;
int p = partition(line,lo,m);
qsort(line,p+1,m);
qsort(line,lo,p-1);
}
int partition(char *line[], int lo, int m) /*function for partition in
{ quick sort */
int index=0;
char *t = line[m];
for (int i = lo; i <= m - 1; i++)
{
if (strcmp(line[i], t) <= 0)
{
char *p = line[i];
line[i] = line[index];
line[index] = p;
index++;
}
}
char *p = line[m];
line[m] = line[index];
line[index] = p;
return index;
}
Он состоит из ряда функций, и я дал попытался дать описание сортировки each.Even после нескольких часов я был не в состоянии понять, почему он печатает первый вход line only. Пожалуйста, помогите выяснить, в чем проблемы в этом коде.
Выполнить в отладчике, шаг через код построчно, следить переменных и их значений. –
Что приводит к ошибкам типа 'ошибки конфликтующих типов для 'getline''? –
ответ [здесь] (http://stackoverflow.com/questions/13112784/undefined-reference-to-getline-in-c) Я этого не знал! +1 для вопроса OP –