我在 array[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));
}
最佳答案
nums_for_mode
未初始化,您也不终止它。
在main顶部附近,将nums_form_mode的每个成员设置为0:
for(int a = 0; a < 50; a++)
nums_for_mode[a] = 0;
或者,在声明点用 ={0} 对其进行初始化。修复此问题将阻止您的段错误,但程序仍然错误:
您还应该循环获取数字,目前,您的程序实际上只接收一个数字。
array[30] 很容易溢出,包括输入 30。至少应该将其延长一倍,并且在读取时检查输入是否确实在范围内。
里>function_called 缓冲区太小,容易溢出,应限制调用 scanf 时输入的大小。
这一行:
while (array[i2]!='\0')
没有太多逻辑意义,它会提前终止而不实际检查输入。
关于c - 为什么我在这里遇到段错误 (C),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20013083/