微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

当我运行代码时,这段代码有什么问题,它没有给出所需的输出

如何解决当我运行代码时,这段代码有什么问题,它没有给出所需的输出

#include<stdio.h>
#include<string.h>
#include<conio.h>
int main()
{
char pwd[5];
int i;
printf("Enter your password: ");
for(i=0;i<=3;i++)
{
pwd[i]=_getch();
printf("%c",pwd[i]);
 if(pwd[i]==8)
  {
    if(i>0)
    {
    printf(" \b");
    i--;
    continue;
    }
    else
        break;
  }
}
pwd[i]='\0';
if(strcmp(pwd,"abcd")==0)
{
printf("\nPassword is correct");
}
else
{
printf("\nPassword is not correct");
}
return 0;
}

我希望以这样的形式输出,当用户按退格键时,应删除一个字符,并允许用户重新输入前一个字符,但此代码存在一些问题。 它删除了前一个字符,但不允许重新输入前一个更正的字符,而是将其作为下一个字符,此代码有什么问题,请解释一下?

解决方法

这段代码有一个错误。在 if (i > 0) 语句内的第 18 行,您将变量 i 的值减 1,这没问题。但是,您并没有“重新输入” pwd[i]. 并且请记住,将 '\b' 添加到您的字符串中并不会删除它的前一个字符。它宁可“添加”一个新角色,但您被输出打败了。所以这是修复了错误的工作代码:

#include<stdio.h>
#include<string.h>
#include<conio.h>
int main()
{
    char pwd[5];
    int i;
    printf("Enter your password: ");
    for(i=0; i<=3; i++)
    {
        label:
        pwd[i]=_getch();
        printf("%c",pwd[i]);
        if(pwd[i]==8)
        {
            if(i>0)
            {
                printf(" \b");

                i--;
                goto label;
                continue;
            }
            else
                break;
        }
    }
    pwd[i]='\0';
    if(strcmp(pwd,"abcd")==0)
    {
        printf("\nPassword is correct");
    }
    else
    {
        printf("\nPassword is not correct");
    }
    return 0;
}

我认为这是我的足够解释。剩下的就是让你花时间理解代码。快乐编码!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。