C语言数组查找时key不存在则输出错误提示的实现问题
你现有的find_element函数已经做了找不到元素时返回(size_t)-1的标记逻辑,不需要修改函数内部,也不需要用到continue、goto语句,只要在调用函数后判断返回值即可,修改后的代码如下:
#include <stdio.h> size_t find_element(size_t len, int arr[len], int key) { size_t pos = (size_t)-1; for (size_t i = 0; i < len; ++i) { if (arr[i] == key) { pos = i; break; } } return pos; } int main(void) { size_t len = 7; int arr[] = {0, 1, 2, 3, 4, 5, 6}; int key = 5; // 先接收查找结果 size_t res = find_element(len, arr, key); // 根据返回值判断是否找到元素 if (res == (size_t)-1) { printf("Key not in the array\n"); } else { printf("IDX: %zu \n", res); } return 0; }
原理解释
size_t是无符号整数类型,(size_t)-1会被转换为size_t能表示的最大值,正常数组的下标最大为len-1,不可能等于这个值,所以用它作为元素不存在的标记是安全的。- 不需要在循环内部加打印逻辑,只要循环结束后通过pos的值判断是否找到即可,你之前尝试的循环内加else打印、goto的方案都是多余的。
- 如果你需要把提示打印逻辑放到
find_element函数内部,也可以在return前加判断:
size_t find_element(size_t len, int arr[len], int key) { size_t pos = (size_t)-1; for (size_t i = 0; i < len; ++i) { if (arr[i] == key) { pos = i; break; } } if (pos == (size_t)-1) { printf("Key not in the array\n"); } return pos; }
内容的提问来源于stack exchange,提问作者caSino_Mafia
相关产品推荐
相关产品推荐

