C语言如何将字符串与项目列表比对?求新手友好的实现方法
问题解答
你编写的这段代码无法正常运行,存在以下几处核心错误:
- 依赖缺失:
strcmp函数定义在<string.h>头文件中,你没有引入该头文件,编译会直接报错。 - 逻辑用法错误:C语言的
strcmp函数仅支持单次比对两个字符串,不能将多个字符串用||(逻辑或)拼接后直接作为参数传入strcmp,||只能用来连接两个返回布尔值的判断语句。 - 语法位置错误:
strcmp的相等判断条件==0位置写错,正确写法为strcmp(字符串1, 字符串2) == 0,你将==0写到了第二个参数的内部,完全不符合语法规则。 - 冗余符号错误:
if和else if的判断语句末尾多写了分号;,分号会直接结束判断逻辑,后续大括号内的代码会不受判断条件约束直接执行,打乱程序流程。 - 拼写错误:存在多处笔误,比如变量名
user_imput应为user_input,输出内容的Fuit应为Fruit、Vegtable应为Vegetable,蔬菜列表里的tomatoe正确拼写为tomato。
新手友好的简单实现方案
以下是逻辑清晰、不需要额外掌握复杂知识点的修正代码,完全满足你的需求:
#include <cs50.h> #include <stdio.h> #include <string.h> int main(void) { string user_input = get_string("Fruit or Vegetable?, "); if (strcmp(user_input, "apple") == 0 || strcmp(user_input, "blueberries") == 0 || strcmp(user_input, "cherries") == 0 || strcmp(user_input, "bananas") == 0 || strcmp(user_input, "grapes") == 0 || strcmp(user_input, "oranges") == 0 || strcmp(user_input, "watermelon") == 0 || strcmp(user_input, "lemons") == 0) { printf("Fruit!, %s\n", user_input); } else if (strcmp(user_input, "potatoes") == 0 || strcmp(user_input, "tomato") == 0 || strcmp(user_input, "onions") == 0 || strcmp(user_input, "carrot") == 0 || strcmp(user_input, "bellpepper") == 0 || strcmp(user_input, "lettuce") == 0 || strcmp(user_input, "cucumbers") == 0 || strcmp(user_input, "broccoli") == 0) { printf("Vegetable! %s\n", user_input); } else { printf("NA"); } return 0; }
内容的提问来源于stack exchange,提问作者Joeyxfp
相关产品推荐
相关产品推荐

