C语言数组查找:如何在for循环结束后输出“未找到该数字”提示?
问题原因
你之前把else分支写在for循环内部的if判断后,每遍历到一个不匹配的元素就会触发一次else逻辑,所以会多次重复打印不存在提示。
解决方案
新增一个状态标记变量记录是否找到匹配项,等整个数组遍历完成后,再根据标记判断是否需要打印不存在提示即可,修改后的完整代码如下:
#include <stdio.h> int main() { int n,i,found = 0; int arr[5]={5,4,3,2,1}; int *ptr; printf("input the number you want to find:\n"); scanf("%d",&n); for(i=0;i<5;i++) { if(arr[i]==n) { ptr=&arr[i]; printf("number '%d' is present in the array and it is the %d st/nd/rd/th term in the array.\n its address is: %p\n",n,i+1,(void*)ptr); found = 1; break; // 找到后直接跳出循环,避免不必要的遍历 } } // 循环完全结束后再判断是否未找到 if(found == 0) { printf("number not found\n"); } return 0; }
补充优化说明
- 原代码的
void main不符合C标准规范,改为int main并添加return 0是兼容性更好的写法 - 打印指针地址建议用格式符
%p,同时做void*强制类型转换,符合标准输出要求 - 找到目标后加
break跳出循环,数组规模越大,效率提升越明显
内容的提问来源于stack exchange,提问作者Zeroth
相关产品推荐
相关产品推荐

