请解释为什么以下代码给出第一个手机号码。无论输入的名称是什么:
#include<stdio.h>
#include<conio.h>
int mobileno(char[]);
int main(){
char input[20];
gets(input);
printf("%s",input);
int x;
x = mobileno(input);
printf("%d",x);
switch(x){
case 0:printf("7255222319");break;
case 1:printf("9404521113");break;
case 2:printf("9326513553");break;
case 3:printf("9845621611");break;
case 4:printf("4556312390");break;
case 5:printf("9245178190");break;
case 6:printf("9214188214");break;
case 7:printf("7014773244");break;
case 8:printf("7898888044");break;
};
getch();
return 0;
}
int mobileno(char s[20]){
if( s="katrina" )
{return 1;}else{
if( s="shahid" ){return 2;}else{
if( s="ranbir" ){return 3;}else{
if( s="sharukh" ){return 4;}else{
if( s="hema" ){return 5;}else{
if( s="amitabh" ){return 6;}else{
if( s="shashnk" ){return 7;}else{
if( s="raj" ){return 8;}else{
if( s="aishwarya" ){return 0;}else{
return 9;}}}}}}}}};
};
最佳答案
您不能使用 =
(甚至通过 ==
)运算符来比较字符串。您需要使用strcmp()
为此。
在您的代码中,mobileno()
函数内,
if( s="katrina" )
本质上是尝试将字符串文字“katrina”
的基地址分配给 s
。这与比较相差甚远。
也就是说,
- 永远不要使用
gets()
,它会遇到缓冲区溢出问题。使用更安全的替代方案,fgets()
main()
的推荐签名为int main(void)
关于c - 为什么下面的代码给出了第一个手机号码。不论名字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30755010/