我试图编写一个C程序,它从.txt文件中获取输入,将单词存储在一个字符指针数组中,平均单词长度,并打印出超过平均长度的任何单词。现在我正试图让一个打印函数工作(print_array),我想递归地做这个。由于某些原因,print函数没有打印出数组的所有元素,它只是打印第一个元素并每次删除第一个字符。我在这里做错什么了?干杯
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define ARRAYLEN 100
#define CHARLEN 79
void *emalloc(size_t s) {
void *result = malloc(s);
if (NULL == result) {
fprintf(stderr, "Memory allocation failed!\n");
exit(EXIT_FAILURE);
}
return result;
}
void print_array(char *a, int n) {
if (n > 0) {
printf("%s\n", &a[0]);
print_array(a + 1, n - 1);
}
}
int main(void) {
char word[CHARLEN];
char *wordlist[ARRAYLEN];
double average;
int num_words;
num_words = 0;
average = 0.0;
while (num_words < ARRAYLEN && 1 == scanf("%79s", word)) {
wordlist[num_words] = emalloc((strlen(word) + 1) * sizeof wordlist[0][0]);
strcpy(wordlist[num_words], word);
average += strlen(word);
num_words++;
}
average = average / num_words;
printf("Average is %.2f\n", average);
print_array(*wordlist, num_words);
return EXIT_SUCCESS;
}
输出-
Average is 9.71
hello
ello
llo
lo
o
最佳答案
参数*wordlist
是指向*wordlist[]
的第一个元素的指针,但您希望打印二维数组!所以代码必须是这样的:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void print_char_array(char *words[], int len) {
if (len > 0) {
printf("%s\n", words[0]);
print_char_array(words + 1, len - 1);
}
}
int main (int args, char *argv[]) {
char *words[] = {
"hello", "print", "array", "recursively", "output"
};
print_char_array(words, 5);
return 0;
}
我的英语很差,希望代码能帮助你!
关于c - 递归打印数组,产生奇怪的输出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46230390/