| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 953 人关注过本帖
标题:输入密码的问题,结果总是密码错误。
只看楼主 加入收藏
bcliugw1993
Rank: 1
来 自:中国山东菏泽
等 级:新手上路
帖 子:22
专家分:9
注 册:2011-10-13
结帖率:75%
收藏
已结贴  问题点数:20 回复次数:7 
输入密码的问题,结果总是密码错误。
前言:刚学了字符数组,并按照书上的例题,写了个输入密码的程序。
症结:无论输入正确密码,还是输入错误密码,结果总显示的是“错误密码”。
希望高手指点!

具体程序:


# include

# define N 6
void main()
{
    char code[N] = {'h', 'e', 'l', 'l', 'o'};
    char user[N];
    int i, k, t = 0;
    while (1)
    {
        k = 1;
        printf ("\n");
        printf ("Please input your key: ");
        for (i = 0; i < N; i ++)
            user[i] = getchar ();
        for (i = 0; i < N; i ++)
        {
            if (code[i] != user[i])
            {
                k = 0;
                break;
            }
        }
        
        t ++;
        if (k == 0)
        {
            printf ("\n Key Error!");
        }
        else
        {
            printf ("\n Welcome!");
            break;
        }
        if (t >= 3)
        {
            printf ("\n Your chances are not left, so you'll exit!");
            break;
        }
    }
}
搜索更多相关主题的帖子: 密码 输入密码 include 
2011-12-06 13:30
于祥
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:5
帖 子:1047
专家分:4132
注 册:2011-4-24
收藏
得分:4 
N 应该是5,hello只有5个字母!

最基础的往往是你最容易忽略的!
2011-12-06 13:38
wuyijiang07
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:74
专家分:177
注 册:2011-10-21
收藏
得分:4 
楼上正解,还有你代码复制漏了#include<stdio.h>后面的<>
2011-12-06 13:53
bcliugw1993
Rank: 1
来 自:中国山东菏泽
等 级:新手上路
帖 子:22
专家分:9
注 册:2011-10-13
收藏
得分:0 
哦,这样啊,复制的时候出个问题。。
我先前认为初始化的时候还有一个长度是存储\0的,看来不需要啊。
2011-12-06 14:04
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
收藏
得分:4 
for (i = 0; i < N-1; i ++)
        {
            if (code[i] != user[i])
            {
                k = 0;
                break;
            }
        }
这样就行了,user最後一個字符接受的是\n

我们都在路上。。。。。
2011-12-06 14:22
hnuhsg1226
Rank: 9Rank: 9Rank: 9
来 自:中国
等 级:蜘蛛侠
威 望:2
帖 子:314
专家分:1314
注 册:2011-3-27
收藏
得分:4 
N确实为5,不为5的话,后面的getchar()函数会把'\n'也放入user数组里面,为后面的比较带来问题

我的地盘
2011-12-06 14:46
bcliugw1993
Rank: 1
来 自:中国山东菏泽
等 级:新手上路
帖 子:22
专家分:9
注 册:2011-10-13
收藏
得分:0 
回复 2楼 于祥
    直接把N修改成5不行,那样不能完成第二次循环,即第一次密码输入错误的时候。那么第二次或第三次输入都会显示“密码错误”。
    我认为,用户输入的时候,是输入的连续的字符,应该属于字符串,这里没有用到gets()函数。那么,初始化的时候,应该是对字符串变量进行初始化,而不是对字符数组进行初始化。
    对字符数组进行初始化这种情况,应该输入5个字符,即输入一个字符接着输入一个空格,然后与code[i]进行比较,那这样的化,就不符合用户的要求了,毕竟谁输入密码的时候要输一个就按一下空格呀。
    应该把控制if语句(比较密码)的for循环修改为for(i = 0; i < N - 1; i ++)其余不变,这样可以解决问题。
    看来我们教材上的程序出了个小错误啊,我有空问问老师去。
2011-12-06 15:21
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:4 
回复 楼主 bcliugw1993
你这样初始化
char code[N] = {'h', 'e', 'l', 'l', 'o'};
是没有结束符'\0'的

总有那身价贱的人给作业贴回复完整的代码
2011-12-06 16:20
快速回复:输入密码的问题,结果总是密码错误。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.030268 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved