scanf与if语句配合异常,字符匹配功能失效问题排查
你的C语言代码存在的问题分析
核心逻辑错误
scanf返回值理解完全错误
scanf("%c", &o)的返回值是成功读取的输入项个数(正常读取单个字符时返回1),并非读取到的字符内容。你直接把这个返回值和a[i]做比较,完全不符合需求逻辑。正确流程应该是先通过scanf把字符读入变量o,再判断o是否存在于数组a中。变量
i未初始化
声明char i后没有给它赋值,直接使用a[i]会访问内存中随机位置的内容,属于未定义行为,程序可能崩溃或输出完全不可控的结果。缺少数组遍历判断逻辑
你的需求是检查输入字符是否在数组a的元素里,但当前代码没有任何遍历数组、逐一比对输入字符o的逻辑,根本无法实现“判断字符是否在数组内”的核心功能。
非致命但不规范的问题
- 数组存在冗余重复元素
数组a里重复出现了'g'和'G',虽然不影响功能,但属于不必要的冗余,建议修正为完整的26个小写字母+26个大写字母,避免重复。
修正后的示例代码
#include<stdio.h> int main() { char o; // 完整无重复的大小写字母数组 char a[52] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z', 'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'}; int is_found = 0; // 先读取输入字符,处理输入异常情况 if (scanf("%c", &o) != 1) { printf("输入错误\n"); return 1; } // 遍历数组检查字符是否存在 for(int i = 0; i < 52; i++){ if(o == a[i]){ is_found = 1; break; } } // 根据判断结果输出对应内容 if(is_found){ printf("Your hair looks nice\n"); } else { printf("You look like your mom\n"); } return 0; }
内容的提问来源于stack exchange,提问作者AKRU
相关产品推荐
相关产品推荐

