我被困在该练习中,无法在屏幕上正确打印“ maxcount”和“ mostnum”的值。
#include<stdio.h>
#include<stdlib.h>
#define size 100
void analyzeFrequencies(int sequence[], int* mostnum, int *maxcount, int
length)
{
int i=0, j=0, count=0;
for(i=0;i < length;i++)
{
for(j=i; j < length; j++)
{
if(sequence[i]==sequence[j])
{
count++;
}
}
if(count>=*maxcount)
{
maxcount=&count;
mostnum=&sequence[i];
}
}
}
int main(void)
{
int i, length;
int *mostnum, *maxcount;
int sequence[size]={};
char answer;
do
{
length=0;
for(i=0; i<size; i++)
{
printf("Enter numbers between 0-1000: ");
scanf("%d",&sequence[i]);
if(sequence[i]<0)
{
break;
}
else if(sequence[i]>1000)
{
printf("Wrong input, try again.\n");
}
length++;
}
analyzeFrequencies(sequence, mostnum, maxcount, length);
printf("The number %d occurs the most time, in total %d times\n", *mostnum, *maxcount);
printf("Do you want to enter another sequence (yes = y, no= n)? ");
scanf("%c",&answer);
}while(answer == 'y');
return 0;
}
在本练习中,我要做的是在屏幕上打印出序列中哪个数字出现最多,出现多少次。当我必须使用指针执行此操作时,会出现我的问题,因为我不确定自己正在得到什么并且没有任何意义。 在这里您可以看到规则。
您应该编写一个函数
analyzeFrequencies()
,该函数可以计算已发生的整数自从函数计算以来,序列中出现的次数最多,发生了很多次。两种不同的结果,函数应将这些结果作为指针变量作为参数。
analyzeFrequencies()
的规则:
- 不应该返回一个值(通过指针计算结果)。
- 该功能必须接受用户作为数组参数输入的序列
- 应采用两个计算值(出现次数最多和发生次数)作为指针变量参数。
- 该功能可能无法从用户那里获得任何更多输入,并且可能不会在其上打印任何内容屏幕。
其他规则:
- 必须在
main()
中输入序列,并且也应从main()
中输入所有打印输出 �。- 在对序列进行了分析之后,如果他或她想要的话,应该向用户询问输入新序列。
答案 0 :(得分:1)
您误解了原因在这种情况下使用了指针。由于C仅允许您从函数返回一个项目,因此本练习使用指针在函数内部设置值。
这意味着您不应该在main
中声明指针。相反,您应该声明int
,然后将应用&
地址的结果传递给它们:
int mostnum, maxcount;
analyzeFrequencies(sequence, &mostnum, &maxcount, length);
在analyzeFrequencies
内保留指针,并这样分配:
if(count>=*maxcount)
{
*maxcount = count;
*mostnum = sequence[i];
}
现在,在函数内部分配的值将在main
中声明的局部变量上执行,因为您是通过指针传递它们的。
由于您在分配之前已在*maxcount
中阅读了analyzeFrequencies
,因此必须在进入循环之前添加一个分配,如下所示:
int i=0, j=0, count=0;
*maxcount = 0; // <<== Add this line
for(i=0;i < length;i++)
注意:您在代码中还有其他错误与传递指针无关。例如,当您打印“输入错误,请重试”时,应调整i
以再次引用相同的位置,否则错误的输出将保留在序列中。