QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1567|回复: 16

一个小加密程序高手指点一下

[复制链接]
发表于 2005-1-9 01:49:52 | 显示全部楼层 |阅读模式
我编了这样一个程序大家帮帮看看错在那了
#include<stdio.h>
main()
{char c.s[5]="myqqq";
int i.k;
printf("请输入密码\n");
do{k=0;
for(i=0;i<5;i++);
{c=getch();printf("*");
if(c==s) ++k;}
if(k!=5) printf("erro");
chdir("\\home\\yyy\\c");
system("good.out");
return 0;
}
这个程序就是先通过密码测试以后正确就运行home\\yyy\\c目录下的good.out程序。兄弟高手帮看看。
错误提示
password.c:18:error:syntax error at end of input
发表于 2005-1-9 07:12:48 | 显示全部楼层

Re: 一个小加密程序高手指点一下

[quote:bc24edb41e="zuizhe"]
#include<stdio.h>
[/quote]
#include和<stdio.h>之间要有空格

[quote:bc24edb41e="zuizhe"]
do{k=0;
[/quote]
有"do", "while"在哪里?

[quote:bc24edb41e="zuizhe"]
for(i=0;i<5;i++);
[/quote]
最后那个";"不应该在那里.

[quote:bc24edb41e="zuizhe"]
char c.s[5]="myqqq";
int i.k;
[/quote]
c和s[5], i和k之间不可以用"."(点), 而要用","(逗号).

[quote:bc24edb41e="zuizhe"]
s[5]="myqqq";
[/quote]
既然已经写了"myqqq", 就不用写[5](写s[]="myqqq"就好), 就算一定想写也应该写[6]. 因为在"myqqq"之后其实还有一个'\0'(Null termainating character).

[quote:bc24edb41e="zuizhe"]
chdir("\\home\\yyy\\c");
system("good.out");
[/quote]
这里用
int execv(const char *path, char *const argv[]);
比较好.
回复

使用道具 举报

发表于 2005-1-9 07:37:26 | 显示全部楼层
#include <stdio.h>

int main()
{
        char tempChar;
        char password[] = "helloworld";
        int enterCount;
        int matchedCount = 0;
       
        do
        {
                printf("请输入密码: ");
                for(enterCount = 0; enterCount < strlen(password); enterCount++)
                {
                        tempChar = getchar();
                        printf("*");
                        if (tempChar == password[enterCount])
                                matchedCount++;
                }

                if (matchedCount != strlen(password))
                        printf("Wrong Password!");
                else
                        break;
        }while(1);
       
        execv("/home/yyy/c/good.out", NULL);
        return 0;
}
回复

使用道具 举报

 楼主| 发表于 2005-1-9 11:27:09 | 显示全部楼层
谢谢兄弟指点多谢
我今晚再试试。
回复

使用道具 举报

 楼主| 发表于 2005-1-10 17:55:08 | 显示全部楼层
我想要在输入密码的时候显示*号,但程序还是显示输入的密码.还有如果输入密码错误就退出终端应该怎么写呢.
#include <stdio.h>
main()
{
char c,s[]="myqqq";
int i,k;
printf("password:\n");
do
  {k=0;
   for(i=0;i<5;i++)
   {c=getchar();printf("*");
   if(c==s) ++k;}
   if(k!=5) exit(1);
   execv("/home/yyy/c/hello");
   return 0;
   }

while(k!=5);
回复

使用道具 举报

 楼主| 发表于 2005-1-11 10:42:53 | 显示全部楼层
我上面的程序应该怎么改改就能输入密码显示*号,密码输入错误后退出终端。我不知道错在那了。
回复

使用道具 举报

发表于 2005-1-11 22:39:36 | 显示全部楼层
我想这个程序执行时是输入了一大串字符,按回车之后才显示一串*号吧?

getchar()是缓冲型输入,也就是在你按回车之前getchar()不会返回,输入内容都到缓冲区去了。你应该找一下非缓冲型的i/o函数。
回复

使用道具 举报

 楼主| 发表于 2005-1-11 22:55:52 | 显示全部楼层
高手说的非常之准确啊,那非缓冲型的I/O函数是什么啊,希望知道的高手告诉一下,恕兄弟无知
回复

使用道具 举报

发表于 2005-1-12 06:04:07 | 显示全部楼层
我并非高手,在我们的C语言课本里讲到这个问题,但说的是TC的函数, 你应该找一下linux/Unix函数库。
回复

使用道具 举报

 楼主| 发表于 2005-1-12 08:23:42 | 显示全部楼层
哦,那那位兄弟知道呀帮帮:(
回复

使用道具 举报

发表于 2005-1-12 19:44:43 | 显示全部楼层
getch()不可以么??
回复

使用道具 举报

 楼主| 发表于 2005-1-12 20:29:42 | 显示全部楼层
getch()好象不能用,用了就编译通不过兄弟:(
回复

使用道具 举报

发表于 2005-1-12 22:44:58 | 显示全部楼层
好象有个getpass()函数
回复

使用道具 举报

 楼主| 发表于 2005-1-13 10:15:16 | 显示全部楼层
多谢兄弟热心帮忙,但是换了getpass()函数 这个函数也还是不行:(
回复

使用道具 举报

发表于 2005-1-14 10:40:48 | 显示全部楼层
"也还是不行"指的是再输入密码的时候"什么也看不见", 对吧?
其实这才是Linux Console下标准的密码输入方式, 没什么不好的, 你就将就一下吧.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-6 19:33 , Processed in 0.047384 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表