| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 631 人关注过本帖
标题:那里有错啊 帮忙看一下 代码不多啊
只看楼主 加入收藏
yesterday120
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2008-6-26
收藏
 问题点数:0 回复次数:8 
那里有错啊 帮忙看一下 代码不多啊
#include<stdio.h>
#include<string.h>
void main()
{
char str[]={"8888"},str1[50];
int i,j=1,k;
printf("Please input password:");/*输入密码*/
for(i=0;i<strlen(str);i++)/*密码的长度*/
{
str1[i]=getch();/*输入字符,不可见,键盘所有键都算是字符,不能退格*/
putch('*');/*以*号代替密码*/
}
getch();
printf("\n");
do
{
if(strcmp(str1,str)==0)/*判断密码是否正确*/
{

printf("\nYou are welcome!");
break;
}
else
{
if(j>=3)
{
printf("\nYou have entered three times! You are not welcom!");
break;
}
else
{
printf("\nWrong passward!\nEnter again:");
for(k=0;k<strlen(str);k++)
{
str1[k]=getch();
putch('*');
}
j++;
}
}
}while(j<=3);
}
搜索更多相关主题的帖子: 代码 
2008-06-26 16:12
mqh21364
Rank: 1
等 级:新手上路
帖 子:642
专家分:0
注 册:2008-2-28
收藏
得分:0 
首先,你的str是一个字符串,它会以一个'\0'结尾。

而你在输入str1的时候,只是单纯的输入了4个字符,也就是说,str1里面放的是4个字符。

最后你用strcmp来比较这两个字符数组,str里面存放的是 "8888\0",而str1里面存放的是"8888"(假设你输入的是8888)。

现在你知道为什么错了吧?其实只要加一行代码就好了,至于加什么,加载什么位置,请LZ自己思考一下。

前不见古人,后不见来者。念天地之悠悠,独怆然而涕下。
2008-06-26 16:29
爱喝牛奶的猫咪
Rank: 1
来 自:QQ群46520219
等 级:禁止访问
帖 子:513
专家分:0
注 册:2008-6-16
收藏
得分:0 
/*****************************************************************
** HighlightCodeV3.1 software by yzfy(雨中飞燕) http:// **
*****************************************************************/
#include<stdio.h>
#include<string.h>
void main()
{
   
char str[]={"8888"},str1[50];
    int i,j=1,k;
    printf("Please input password:");/*输入密码*/
   
for (i=0;i<strlen(str);i++)/*密码的长度*/
   
{
        
str1[i]=getch();/*输入字符,不可见,键盘所有键都算是字符,不能退格*/
        
putch('*');/*以*号代替密码*/
   
}
   
getch();
    printf("\n");
    do
   
{
        
if (strcmp(str1,str)==0)/*判断密码是否正确*/
        
{

            
printf("\nYou are welcome!");
            break;
        }
        
else
        
{
            
if (j>=3)
            {
               
printf("\nYou have entered three times! You are not welcom!");
                break;
            }
            
else
            
{
               
printf("\nWrong passward!\nEnter again:");
                for (k=0;k<strlen(str);k++)
                {
                    
str1[k]=getch();
                    putch('*');
                }
               
j++;
            }
        }
    }
   
while (j<=3);
}

闲着没事排个版


[color=white]<" border="0" />>
2008-06-26 16:29
liyanhong
Rank: 3Rank: 3
来 自:水星
等 级:禁止访问
威 望:8
帖 子:1867
专家分:0
注 册:2008-5-3
收藏
得分:0 
[bo][un]爱喝牛奶的猫咪[/un] 在 2008-6-26 16:29 的发言:[/bo]


闲着没事排个版


 

闲着没事 赞一下

爱上你 是 我的错  可是离 开  又舍不得  听着你为我写的歌     好难过
如果说 我说如果  我们还 能  重新来过   不去计 较 谁对谁错  会怎么做
2008-06-26 16:37
lintaoxe
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2007-4-10
收藏
得分:0 
for(i=0;i<strlen(str);i++)/*密码的长度*/
{
str1[i]=getch();/*输入字符,不可见,键盘所有键都算是字符,不能退格*/
putch('*');/*以*号代替密码*/
}
搞什么笑。。用星号代替,你的密码还是在可视的。。。只是多加了中间夹杂了星号。。。。
2008-06-26 20:24
lintaoxe
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2007-4-10
收藏
得分:0 
我以前在debian下写的密码覆盖 ,xp下也可以用
#include <stdio.h>

#ifndef _WIN32                   //Linux platform
#include <termio.h>
#ifndef STDIN_FILENO
#define STDIN_FILENO 0
#endif

int getch(void)
{
        struct termios tm, tm_old;
        int fd = STDIN_FILENO, c;
        if(tcgetattr(fd, &tm) < 0)
                return -1;
        tm_old = tm;
        cfmakeraw(&tm);
        if(tcsetattr(fd, TCSANOW, &tm) < 0)
                return -1;
        c = fgetc(stdin);
        if(tcsetattr(fd, TCSANOW, &tm_old) < 0)
                return -1;
        return c;
}

#else                            //WIN32 platform
#include <conio.h>
#endif


#define MAX_LEN   8
#define BACKSPACE 8
#define ENTER     13
#define ALARM     7

char *getPasswd(const char *prompt)
{
    int i=0, ch;
    static char p[MAX_LEN+1]="";
    printf("%s", prompt);
    while((ch = getch())!= -1 && ch != ENTER)
    {
         if(i == MAX_LEN && ch != BACKSPACE)
         {
              putchar(ALARM);
              continue;
         }
         if(ch == BACKSPACE)
         {
             if(i==0)
              {
                  putchar(ALARM);
                  continue;
              }
              i--;
              putchar(BACKSPACE);
              putchar(' ');
              putchar(BACKSPACE);
         }
         else
         {
             p[i] = ch;
             putchar('*');
             i++;
         }
    }

    if(ch == -1)
    {
        while(i != -1)
        {
            p[i--] = '\0';
        }
        return NULL;
    }
    p[i]='\0';
    printf("\n");
    return p;
}


int main()
{
    char *pw = getPasswd("passwd:");
    puts(pw);
    puts("clearing the static buffer with 0 ...");
    while(*pw)
    {
        *pw++=0;
    }
    pw=NULL;

    return 0;
}
2008-06-26 20:30
flyue
Rank: 10Rank: 10Rank: 10
来 自:江南西道
等 级:贵宾
威 望:19
帖 子:3465
专家分:1563
注 册:2006-6-20
收藏
得分:0 
[bo][un]liyanhong[/un] 在 2008-6-26 16:37 的发言:[/bo]


闲着没事 赞一下


闲着没事 顶一下

天之道,损有余而补不足.人之道则不然,损不足以奉有余.孰能有余以奉天下,唯有道者.
2008-06-26 20:38
chinaxy11
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2007-11-14
收藏
得分:0 
完善下六楼的。。如果我要使用密码,,因为你从键盘上得到是字符即ascll码,索以要转换成十进制的。while   (( i < 127) && (letter!='\r'))   
    {   
        letter = getch();   
        if (letter == BACKSPACE)   
        {   
        if(i>0)   
            {   //letter=letter/10;
                //buffer[--i]=NULL;
            sum=sum/10;
                putchar(BACKSPACE);   
                putchar( '   ');   
                   putchar(BACKSPACE);   
            }   
            else   
            {   
                putchar(7);   
            }   
        }   
        else if ( letter != '\r')   
        {   
            buffer[i] =letter;
            sum=sum*10+(buffer[i]-'0');
            i++;
            putchar('*');   
        }   
    }  可以参考下
2008-06-26 23:13
yesterday120
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2008-6-26
收藏
得分:0 
回复 2# mqh21364 的帖子
恩 谢谢你 我刚学的 不太会  但会努力的
2008-06-27 18:34
快速回复:那里有错啊 帮忙看一下 代码不多啊
数据加载中...
 
   



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

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