Я пытаюсь сделать этот проект программирования в книге, которую я изучаю:
Напишите программу, которая сортирует серии слов, введенных пользователем:
Введите слово: foo
Введите слово: bar
Введите слово: baz
Введите слово: quux
Введите слово:
В отсортированном порядке: bar baz foo quux
Предположим, что каждое слово содержит не более 20 символов. Прекратите чтение, когда пользователь вводит пустое слово (т. Е. Нажимает Enter, не вводя слово). Сохраните каждое слово в динамически распределенной строке, используя массив указателей для отслеживания строк.
После прочтения всех слов отсортируйте массив (используя любую технику сортировки), а затем используйте al oop печатать слова в отсортированном порядке.
Вот что я пытаюсь:
#include <stdio.h>
#include <string.h>
#define MAX_LENGTH 20
int compare ( const void * p, const void * q);
int main (void){
int n;
printf("How many words do you want to write");
scanf("%d", &n);
fflush(stdin);
char * word[n];
for( int i = 0; i < n; i++){
fprintf(stdout , "Waiting for the word:");
if(fgets(word[i] , MAX_LENGTH +1 , stdin) == "\n")
break;
}
qsort((void *)word,n,sizeof(int),compare);
printf("Ordered list is:\n\n");
for( int i = 0; i < n; i++){
fprintf(stdout , "\t %s", word[i]);
}
}
int compare (const void * p, const void * q){
return strcmp( * (char**) p , * (char **) q);
}
Редактировать: вопрос с itali c решен благодаря коллегам-кодировщикам здесь. Моя новая проблема - я не могу прочитать после первого элемента массива. И программа закрывается сама.
C:\Users\Lenovo\Desktop\ogrenme\ch17>sorting
How many words do you want to write4
Waiting for the word:asd
C:\Users\Lenovo\Desktop\ogrenme\ch17>
И есть одна раздражающая ошибка, которая не дает мне завершить упражнение и «расслабиться» с остальной частью этой сложной книги:
sorting.c:20:5: warning: implicit declaration of function 'qsort' [-Wimplicit-function-declaration]
qsort((void *)word,n,sizeof(int),compare);