c - 为什么下面的代码给出了第一个手机号码。不论名字

标签 c string switch-statement comparison

请解释为什么以下代码给出第一个手机号码。无论输入的名称是什么:

#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。这与比较相差甚远。

也就是说,

  1. 永远不要使用gets(),它会遇到缓冲区溢出问题。使用更安全的替代方案,fgets()
  2. main() 的推荐签名为 int main(void)

关于c - 为什么下面的代码给出了第一个手机号码。不论名字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30755010/

相关文章:

java - Switch 与 ArrayList Java

c - 程序退出,代码为 : 5 - Geany with gcc

c - -lcs50 命令行参数在 clang 中有什么作用?

c - mprotect 后 malloc 导致段错误

mysql - 将字符串与mysql上的日期进行比较

Java - switch case,多个case调用同一个函数

c - 如何使 printf 从右到左

java - 在 | 上拆分字符串Java 中的(管道)

com - 为什么 COM 不使用静态的空 BSTR?

php - 将索引转换为指定字符串的更简洁方法?