C语言程序异常:无法进入Linear_Search()函数问题排查求助
无法进入Linear_Search()函数的原因排查与修复
首先,你代码里无法进入Linear_Search()函数的核心原因是函数调用方式完全错误,同时还有一堆语法和逻辑问题会导致程序崩溃,我来逐一拆解:
一、为什么函数没被调用?
在你的main()函数里,犯了两个关键错误:
- 你写了
void Linear_Search();——这是函数声明,不是调用语句!而且C标准不允许在函数内部声明其他函数(部分旧编译器可能兼容,但属于不良写法)。 - 在
case 1分支里,你根本没写出正确的调用代码(只写了半截的void Linear_Sear...),正确调用函数只需要写Linear_Search();,不需要加返回类型void。
二、Linear_Search()函数内部的致命bug
就算你成功调用了函数,程序也会崩溃或者逻辑错误,这些问题必须修复:
scanf("%d", n);:scanf要求传入变量的内存地址,这里直接传n会导致内存访问错误,必须改成scanf("%d", &n);。- 循环后的多余分号:你写的
for (i = 0; i <= n; i++); { ... }里,循环末尾的分号会让循环体变成空语句,后面的大括号代码只会执行一次;同时i <= n会导致数组下标越界(数组下标范围是0到n-1),应该改成for (i = 0; i < n; i++) { ... }。 if语句后的多余分号:if (q == arr[i]); { ... }里的分号会让条件判断失效,不管是否匹配都会执行大括号里的代码,直接去掉这个分号即可。- 变量重复定义+未初始化:你在
Linear_Search()里重新定义了arr[n]和n,但定义数组时n还未赋值,会导致数组大小不确定,出现未定义行为,应该先输入n再定义数组。 getch()兼容性问题:getch()是非标准函数,很多现代编译器(比如GCC)不支持,换成标准的getchar()就行。
三、修复后的完整代码
#include <stdio.h> // 全局声明函数,避免内部声明的问题 void Linear_Search(); // 标准main函数返回类型是int,不是void int main() { printf("ALL SEARCHING TECHNIQUE\n"); printf("Choices\n"); printf("1.Linear Search\n2.Binary Search\n3.Interpolation Search\n4.Jump Search\n"); int select; scanf("%d", &select); switch (select) { case 1: printf("This is Linear Search\n"); Linear_Search(); // 正确的函数调用 break; default: printf("Invalid choice!\n"); } return 0; } void Linear_Search() { int i, q, flag = 0, num, n; printf("Enter the number of array elements: "); scanf("%d", &n); // 传入变量地址 // 先获取n,再定义变长数组(C99及以后支持) int arr[n]; printf("Enter the %d numbers: ", n); for (i = 0; i < n; i++) { scanf("%d", &arr[i]); } printf("Enter the number to be searched: "); scanf("%d", &q); for (i = 0; i < n; i++) { if (q == arr[i]) { num = q; flag = 1; break; // 找到后直接跳出循环,优化性能 } } if (flag == 1) { printf("Found! Number is %d\n", num); } else { printf("Number not present in the array\n"); } getchar(); // 替换getch(),兼容更多编译器 }
额外提示
- 标准C语言中
main()必须返回int,不能用void,否则会有未定义行为。 - 如果你需要兼容更老的编译器(不支持变长数组),可以用动态内存分配:
int *arr = (int*)malloc(n * sizeof(int)); // 使用完后记得释放内存 free(arr);
内容的提问来源于stack exchange,提问作者Ankan Sharma
相关产品推荐
相关产品推荐

