Итак, это третья неделя моей жизни на C, и мне было поручено написать программу, которая вмещает до 100 слов длиной до 80 символов, вычисляет среднюю длину слова на входах, печатает слова больше, чем средний, и, наконец, печатает средний размер слова.
РЕДАКТИРОВАТЬ: Мы также должны использовать emalloc, рекурсивный метод вывода и освободить всю использованную память.
Успех! ... или так я думал.
Я написал следующее в Eclipse, которое использует gcc -E -P -v -dD
в качестве аргументов компиляции, и не получаю ошибок времени выполнения при запуске программы с использованием предоставленных тестовых случаев.
Теперь я выполнил код, который мне нужно воспроизвести в течение 30 минут практики. Нам говорят, что мы должны использовать текстовый редактор и что gcc -W -Wall -ansi -pedantic
нужно будет использовать в качестве аргументов компиляции, но если я использую эти аргументы вместо этого, это означает, что моя программа всегда завершается с ошибкой шины
РЕДАКТИРОВАТЬ: исправлено и отформатировано
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXIMUM_STRING_LENGTH 80
#define MAXIMUM_ARRAY_LENGTH 100
void* memory_allocation(size_t sizeof_memory_required) {
void* free_memory_pointer = malloc(sizeof_memory_required);
if (free_memory_pointer/*exists*/) {
return free_memory_pointer;
} else {
fprintf(stderr, "*** MEMORY ALLOCATION FAILURE ***\n");
exit(EXIT_FAILURE);
}
}
void print_larger_than_average_strings(char** string_pointers, int i, const double AVERAGE_STRING_LENGTH) {
if (string_pointers[i]/*exist*/) {
if (strlen(string_pointers[i]) > AVERAGE_STRING_LENGTH) {
printf("%s\n", string_pointers[i]);
}
print_larger_than_average_strings(string_pointers, ++i, AVERAGE_STRING_LENGTH);
} else {
fprintf(stderr, "%.2f\n", AVERAGE_STRING_LENGTH);
}
}
int main(void) {
int string_count = 0;
char string[MAXIMUM_STRING_LENGTH];
char* string_pointer[MAXIMUM_ARRAY_LENGTH];
int i;
double character_count;
while ((string_count < MAXIMUM_ARRAY_LENGTH) && (1 == scanf("%79s", string))) {
string_pointer[string_count] = memory_allocation(sizeof string_pointer[0][0] * (strlen(string) + 1));
strcpy(string_pointer[string_count++], string);
}
string_pointer[string_count] = NULL;
for (i = 0; i < string_count; i++) {
character_count += strlen(string_pointer[i]);
}
if (string_count/*exists*/) {
print_larger_than_average_strings(string_pointer, 0, character_count / string_count);
for (i = 0; i < string_count; i++) {
free(string_pointer[i]);
}
}
return EXIT_SUCCESS;
}