亦行之 2024-03-06 21:45 采纳率: 34.5%
浏览 3
已结题

PAT1064c语言输出有误

img

img


我的代码:


#include<stdio.h>
#include<string.h>//strcmp函数的头文件 
int main()
{
    char s[21],b[1000];//要把b的长度设置大一点否则会出现运行时错误 ! 
    int n,count=0;
    scanf("%s %d",s,&n);
    getchar();
    while(1){
        gets(b);
        count++;
        if(b[0]=='#'&&b[1]=='\0')//满足只有单个#,注意是单个!! 
        {
            break;
         } 
         //if(strcmp(s,b)==0)//判断两个字符串相等,相等则为0
         if(b==s) //为啥用这个不能得到welcome in??? 
         {
             printf("Welcome in\n");
             break; 
          } 
          else{
              printf("Wrong password: %s\n",b);
              if(count==n){
                  printf("Account locked\n");
                  break;
              }
          }
    }
    return 0;
}

在pta上的结果:

img


原因是在第17行 if(b==s) ,如果改成第16行的注释if(strcmp(s,b)==0)结果就正确,请问这是为什么?难道b==s不能判断字符串相等吗

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-03-06 21:46
    关注

    引自免费微信小程序:皆我百晓生

    在您的代码中,问题出在字符串比较的条件语句:

    if(b==s) // 这里使用了错误的比较方式
    

    C 语言中的字符串不能直接通过 == 操作符来比较它们的内容是否相等。bs 在这里是字符数组(即字符串)的指针,用 == 只是比较它们的地址是否相同,而不是内容。

    正确的做法是使用 strcmp() 函数进行字符串内容的比较,这是 C 标准库函数,它会返回一个整数值来指示两个字符串的关系:

    #include <string.h> // 确保包含了这个头文件
    
    // ...
    
    if(strcmp(s, b) == 0) // 正确的字符串比较方式
    {
        printf("Welcome in\n");
        break;
    }
    

    修改后的完整代码如下:

    #include<stdio.h>
    #include<string.h>
    
    int main()
    {
        char s[21], b[1000];
        int n, count = 0;
        scanf("%s %d", s, &n);
        getchar(); // 吸收换行符,避免影响后续 gets()
    
        while (1)
        {
            gets(b);
            count++;
            if (b[0] == '#' && b[1] == '\0')
            {
                break;
            }
            else if(strcmp(s, b) == 0) // 修改这里为正确字符串比较
            {
                printf("Welcome in\n");
                break;
            } 
            else
            {
                printf("Wrong password: %s\n", b);
                if (count == n)
                {
                    printf("Account locked\n");
                    break;
                }
            }
        }
        
        return 0;
    }
    

    现在您的代码应该可以正常比较输入的密码字符串与目标字符串 s 是否一致,并输出相应的结果。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 3月14日
  • 已采纳回答 3月6日
  • 创建了问题 3月6日

悬赏问题

  • ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
  • ¥15 安装quartus II18.1时弹出此error,怎么解决?
  • ¥15 keil官网下载psn序列号在哪
  • ¥15 想用adb命令做一个通话软件,播放录音
  • ¥30 Pytorch深度学习服务器跑不通问题解决?
  • ¥15 部分客户订单定位有误的问题
  • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
  • ¥15 Bug traq 数据包 大概什么价
  • ¥15 在anaconda上pytorch和paddle paddle下载报错
  • ¥25 自动填写QQ腾讯文档收集表