C语言查询姓名是否在数据库时if判断始终为false问题求助
问题原因
- 错误使用
==比较字符串:C语言中==作用于字符数组时,实际对比的是两块内存的首地址,而非字符串内容。name和DB[i]属于不同的内存空间,首地址永远不相等,因此判断永远返回false。字符串内容比较需要使用<string.h>头文件提供的strcmp()函数,函数返回0时代表两个字符串完全一致。 fgets()会保留输入末尾的换行符:用户输入结束按下回车后,fgets()会将换行符\n一并存入name数组的末尾,导致即使输入内容和数据库一致,比对也会失败,需要手动移除末尾的换行符。
修正后完整代码
#include <stdio.h> #include <string.h> int main() { char DB[][50]={"ahmed alla","Shady Ibrahim","Sara Sedky","Mohamed Ezz"}; char name[50]; printf("请输入你的姓名:"); fgets(name,50,stdin); // 移除fgets读取到的末尾换行符 name[strcspn(name, "\n")] = '\0'; int flag=1; for(int i=0;i<4;i++) { if(strcmp(name, DB[i]) == 0) { flag=0; printf("welcome %s \n",name); // 匹配到后直接跳出循环,无需多余遍历 break; } } if(flag) { printf("sorry your name is not in the DB!"); } return 0; }
内容的提问来源于stack exchange,提问作者CIS Loop
相关产品推荐
相关产品推荐

