在C程序中打印比计算的平均字长的字
我有一个程序,目前读取字到一个变量*字符字列表[lengthOfArray];所以基本上它包含char单词[10]。我可以成功地计算出平均字长,但我有一种方法,我想递归地打印比平均字长的字在C程序中打印比计算的平均字长的字,c,arrays,char,C,Arrays,Char,我有一个程序,目前读取字到一个变量*字符字列表[lengthOfArray];所以基本上它包含char单词[10]。我可以成功地计算出平均字长,但我有一种方法,我想递归地打印比平均字长的字 void printAverage(char *wordlist, int n, int average){ if (n > 0){ if (strlen(wordlist[0]) > average){ printf("%s\n", wordlist[0]); //
void printAverage(char *wordlist, int n, int average){
if (n > 0){
if (strlen(wordlist[0]) > average){
printf("%s\n", wordlist[0]); // Print the one longer than average then move on
printAverage(wordlist + 1, n-1, average);
}
else {
printAverage(wordlist+1, n-1, average);
}
}
}
我在网上找了好几个小时,想看看有什么不对,但出于某种原因,比较
如果(strlen(a[0])>average)没有正确获取单词的值,并给出错误信息
传递strlen的arg 1将从整数生成指针,而不进行强制转换
有人知道我怎么才能正确地做到这一点吗?提前谢谢你的帮助,我只是被卡住了,我已经尝试了很多没有用的东西 您的变量
wordlist
不是一个单词数组-它是一个字符串。如果您有一个单词数组,它可以是如下所示的2D数组:
char *wordlist[]
char **wordlist
或者这个:
char wordlist[][10]
或者像这样的双指针:
char *wordlist[]
char **wordlist
您需要根据传入的实际数据设置参数。您将wordlist声明为指向char的指针,而不是指向char的指针。 char是一个整数类型,因此当您将其作为字列表[0]取消引用并将其传递给strlen()时,编译器会警告您传递整数类型而不是指针 尝试:
“a”在哪里声明?啊,对不起,a实际上是单词列表。字符串通常以nul结尾吗?函数究竟是如何失败的?它是打印所有单词还是根本不打印?它没有明显的问题…它什么都不做,有时会崩溃。谢谢你的帮助,但我已经声明了wordlist,正如你所说的char*wordlist[]。我是否也需要将其作为*wordlist[]传递?@KadinBoyle这是一个奇怪的问题。当然,类型必须匹配。您在wordlist[0]上执行strlen和printf(“%s”),因此它当然必须是
char*
,而wordlist本身必须是指向char*
(声明为char*wordlist[]
与声明为char**wordlist
相同)。传递的参数就是wordlist
@KadinBoyle如果函数外部的wordlist
被声明为char*wordlist[10]
,那么调用函数时只需将其作为wordlist
传递。只是给它一个旋转,遗憾的是它说[Warning]从不兼容的指针类型传递“printAverage”的arg 1。我从你说的话中学到了:)@KadinBoyle,它是为哪个printAverage的调用说的?@JimBalter,就是它之前的方法,谢谢大家,还有@paddy