所以这是我在 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;
}