我一直在线阵[j] = array [j] +1中得到分段错误。 我已经包含了用于调用“模式”的主要功能部分,这是我遇到麻烦的功能。该程序应该以字符串的形式接受用户输入。根据字符串的含义,函数可以执行不同的操作。对于输入“模式”,它从用户获取一个数组,然后找到最常出现的模式或数字。该计划可能不是最干净或最有效的,但我只需要它工作。谢谢你的帮助。
int mode(int input[]){
int array[30]={0},i=0,j=0,i2=0,j2=0;
while (input[i]!='\0'){
j=input[i];
array[j]=array[j]+1;
i++;
}
while (array[i2]!='\0'){
if (array[i2]>j2){
j2=array[i2];
i2++;
}
else{
i2++;
}
}
return j2;
}
int main(){
char function_called[7];
int nums_for_mode[50],num_for_primes;
int num1,den1,num2,den2;
printf("Please choose a function (mode, primes, or fradd): ");
scanf("%s",&function_called);
if(strcmp(function_called, "mode")==0){
printf("\nPlease provide numbers between 1 and 30: ");
scanf("%i",&nums_for_mode);
printf("\nThe mode is %i\n",mode(nums_for_mode));
}
答案 0 :(得分:0)
nums_for_mode
未初始化,您也不会终止它。
在main的顶部附近,将nums_form_mode的每个成员设置为0:
for(int a = 0; a < 50; a++)
nums_for_mode[a] = 0;
或者,在声明点用= {0}初始化它。修复这个会停止你的段错误,但程序仍然是错误的:
您还应该循环获取数字,目前,您的程序实际只收到一个数字。
数组[30]很容易溢出,包括输入30.你应该至少延长一次,并在阅读时检查输入是否实际在范围内。
< / LI>function_called缓冲区太小而且容易溢出,你应该在scanf调用中限制输入的大小。
这一行:while (array[i2]!='\0')
没有太大的逻辑意义,它会提前终止而不会实际检查输入。