| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1670 人关注过本帖, 1 人收藏
标题:C语言密码问题
只看楼主 加入收藏
lsh106665347
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2013-1-6
收藏
得分:0 
#define MAX 14
#define BACKSPACE 8
少了 两个宏定义
2013-01-19 14:24
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
哦,晚点有时间弄一个函数给你吧。

授人以渔,不授人以鱼。
2013-01-19 14:25
lsh106665347
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2013-1-6
收藏
得分:0 
好的,谢谢
2013-01-19 14:49
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
程序代码:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <conio.h>

const int MaxLength_Password = 14;
const int K_BACKSPACE = 0x08;
const int K_ENTER = 0x0D;

bool Get_Password(const char* password);

int main(void)
{
    const char* correct_password = "Hello, world";

    printf_s("Please input your password: ");
    printf_s("\nYour password is %s.\n", Get_Password(correct_password) ? "correct" : "error");
    _getch();
    return 0;
}

bool Get_Password(const char* password)
{
    char buffer[MaxLength_Password + 1];
    bool escape = false;
    int counter = 0;

    while (!escape)
    {
        int keypress = _getch();
        switch (keypress)
        {
            case K_ENTER:
                buffer[counter] = '\0';
                escape = true;
                break;
            case K_BACKSPACE:
                if (counter > 0)
                {
                   --counter;
                    _putch(K_BACKSPACE);
                    _putch(' ');
                    _putch(K_BACKSPACE);
                }
                break;
            default:
                if (isgraph(keypress) || (keypress == ' '))
                {
                    _putch('*');
                    buffer[counter++] = keypress;
                    if (counter == MaxLength_Password)
                    {
                        buffer[MaxLength_Password] = '\0';
                        escape = true;
                    }
                }
                break;
        }
    }

    return (strcmp(buffer, password) == 0);
}


[ 本帖最后由 TonyDeng 于 2013-1-19 15:30 编辑 ]

授人以渔,不授人以鱼。
2013-01-19 15:22
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
用两个退格键,茅塞顿开啊,多谢T版教诲


[fly]存在即是合理[/fly]
2013-01-19 16:41
lsh106665347
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2013-1-6
收藏
得分:0 
回复 14楼 TonyDeng
程序代码:
#include "student.h"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>

#define MAX 14
#define BACKSPACE 8

struct StudentInfo//学生信息结构体
{
    char name[20];//姓名
    char num[10];//学号
    int Sore[3];//语文 数学 英语
        StudentInfo *next;
};
StudentInfo stu;
StudentUser User;
StudentInfo *head=NULL;
bool IsExist(char * name, char * pw)
{
    char pname[20];
    char mima[20];
    FILE * fp = fopen("user.txt", "r");
    if (NULL == fp)
        return 0;
    while (1)
    {
        if (2 != fscanf(fp, "%s%s", pname, mima))
            break;
        if ((strcmp(pname, name) == 0) && (strcmp(mima, pw) == 0))
        {
            fclose(fp);
            Menu();
            return 0;
        }
    }
    fclose(fp);
    return false;
}
void getpassword()
{
    char ch;
    int i=0;
                while ((ch = getch()) !='\r' && i < MAX)
            {
                if (ch == BACKSPACE)
                {
                    if (i > 0)
                    {
                        User.PassWord[--i] = '\0';
                        printf("\b ");
                        printf("%c%c%c", BACKSPACE, ' ', BACKSPACE);
                    }
                    else
                        putchar(7);
                }
                else
                {
                    User.PassWord[i++] = ch;
                    printf("*");
                }
            }
                    User.PassWord[i] = '\0';
}
int main()
{
    
    int count = 0;
    int i = 0;
    //    char ch;
    while (1)
    {
        system("cls");
        printf("请输入账号:");
        gets(User.UserName);
        printf("请输入密码:");
        getpassword();
        gets(User.PassWord);

        //            while ((ch = getch()) !='\r' && i < MAX)
        //        {
        //            if (ch == BACKSPACE)
        //            {
        //                if (i > 0)
        //                {
        //                    User.PassWord[--i] = '\0';
        //                    printf("\b ");
        //                    printf("%c%c%c", BACKSPACE, ' ', BACKSPACE);
        //                }
        //                else
        //                    putchar(7);
        //            }
        //            else
        //            {
        //                User.PassWord[i++] = ch;
        //                printf("*");
        //            }
        //        }
        //            User.PassWord[i] = '\0';
        //        fflush(stdout);
        //        fflush(stdin);
        //            puts(User.PassWord);
        //    fflush(stdout);
        if (IsExist(User.UserName, User.PassWord))
        {
            break;
        }
        if (count == 2)
        {
            printf("您已经输错三次,系统将自动退出!\n");
            break;
        }
        printf("帐号或者密码不正确,按回车键重新输入!");
        count++;
        getchar();
        
    }
    //    system("cls");
    //    printf("请输入账号:");
    //    gets(User.UserName);
    //    printf("请输入密码:");
    //    gets(User.PassWord);
    //    if (IsExist(User.UserName, User.PassWord))
    //    {
    //        printf("您已经输错三次,系统将自动退出!\n");
    //    }
    return 0;
}
//******************************************************************
void ex()
{
    char ch;
    getchar();
    do
    {
        printf("您确定要退出吗?(y/n):");
        scanf("%c", &ch);
    }
    while ((ch != 'Y') && (ch != 'y') && (ch != 'N') && (ch != 'n'));
    if (ch == 'Y' || ch == 'y')
    {
        exit(0);
    }
    return;
}
//**********************************************************************
int Menu()
{
    //    struct StudentInfo * parr;            
    //    int len = 0;
    int choose;
    //    parr = (struct StudentInfo *)malloc((sizeof(struct StudentInfo) * len));
    fflush(stdin);
    while (1)
    {
        system("cls");
        printf("*************************\n");
        printf("\t1:修改密码\n");
        printf("\t2:录入学生信息\n");
        printf("\t3:查找学生信息\n");
        printf("\t4:修改学生信息\n");
        printf("\t5:保存学生信息\n");
        printf("\t6:排序\n");
        printf("\t7:退出\n");
        printf("*************************\n");
        printf("请选择1--7 : ");
        scanf("%d", &choose);
        switch (choose)
        {
        case 1: exmima();break;
        case 2: insert();break;
        case 3: selecetlist();break;
        case 4: change();break;
        case 5: save();break;
        case 6: Sort(); break;
        case 7: ex();break;
        default: printf("你的选择不正确 请重新选择\n");
        }
        getchar();
        //        getchar();
    }
    
}
//********************************************************************
void selecet()
{
    //    char name[20];
    FILE * fp = fopen("test.txt", "r");
    if (!fp)
    {
        printf("文件打开失败!\n");
        return;
    }
    
    char ch;
    while ((ch = fgetc(fp)) != EOF)
    {
        fputc(ch, stdout);
    }
    putchar('\n');
    getchar();
    getch();
    fclose(fp);
    
}
//*********************************************************************
void Sort()
{
    int choose;
    fflush(stdin);
    while (1)
    {
        system("cls");
        printf("*************************\n");
        printf("\t1:按语文成绩排序\n");
        printf("\t2:按数序成绩排序\n");
        printf("\t3:按英语成绩排序\n");
//        printf("\t4:按总分成绩排序\n");
        printf("\t4:返回\n");
        printf("*************************\n");
        printf("请选择1--4 : ");
        scanf("%d", &choose);
        switch (choose)
        {
        case 1: SelectSort(0);break;
        case 2: SelectSort(1);break;
        case 3: SelectSort(2);break;
//        case 4: break;
        case 4: Menu();break;
        default: printf("你的选择不正确 请重新选择\n");

        }
    }
    system("pause");
}
//*****************************************************************
void insert()//输入数据
{
    int len;
    int i;//控制循环
    FILE * fp = fopen("test.txt", "a+");
        if (!fp)
        {
            printf("文件没有打开!程序结束!");
            getchar();//等待用户观察
            exit(0);
    }    
    printf("请输入需要存入的学生人数:");
    scanf("%d", &len);
    for (i = 0; i < len; i++)
    {
        printf("请输入学生信息:\n");
        
        printf("姓名:");
        scanf("%8s", stu.name);
        //getchar();
        //        printf("总成绩: ");
        //        scanf("%s",stu.Sore);
        getchar();
        printf("学号:");
        scanf("%5s", stu.num);
        getchar();
        printf("语文成绩: ");
        scanf("%3d", &stu.Sore[0]);
        getchar();
        
        printf("数学成绩: ");
        scanf("%3d", &stu.Sore[1]);
        getchar();
        
        printf("英语成绩: ");
        scanf("%3d", &stu.Sore[2]);
        
    
//        else
//        {
//            for (int j = 0; j < len; j++)//将数据依次写入文件
//            {
                fprintf(fp, "姓名:%8s  学号:%5s 语文成绩:%3d 数学成绩:%3d 英语成绩:%3d\n",
                    stu.name, stu.num, stu.Sore[0],stu.Sore[1], stu.Sore[2]);
//            }
//        }
        
    }
    fclose(fp);
    system("pause");
    printf("\n");
}
//************************************************************************
void save()
{
        int len;
    FILE * fp = fopen("test.txt", "a+");
    if (!fp)
    {
        printf("文件没有打开!程序结束!");
        getchar();//等待用户观察
        exit(0);
    }
    else
    {
        for (int j = 0; j < len; j++)//将数据依次写入文件
        {
            fprintf(fp, "姓名:%8s  学号:%5s 语文成绩:%3s 数学成绩:%3s 英语成绩:%3s\n",
                stu.name, stu.num, stu.Sore[0], stu.Sore[1], stu.Sore[2]);
        }
    }
    printf("学生数据已经保存!\n");
    //    语文成绩:%s 数学成绩:%s 英语成绩:%s
    //    stu.Sore[0],stu.Sore[1],stu.Sore[2]
    //    getch();
    fclose(fp);
    system("pause");
    
}
//********************************************************************
void exmima()
{
    
    char mima[20];
    printf("请输入新的密码:");
    scanf("%s", mima);
    FILE * fp = fopen("user.txt", "r+");
    char name1[20];
    char mima1[10];
    long index;
    while (1)
    {
        index = ftell(fp);
        if (2 != fscanf(fp, "%s%s", name1, mima1))
            break;
        if (strcmp(User.UserName, name1) == 0)
        {
            if (fseek(fp, index, 0))
                fprintf(fp, "%s\t%s", User.UserName, mima);
            
            else
                fprintf(fp, "\n%s\t%s", User.UserName, mima);
            printf("密码修改成功\n");
            break;
        }
    }
    system("pause");
    fclose(fp);
}
//****************************************************************
void selecetlist()
{
    int choose;
    while (1)
    {
        system("cls");
        printf("*************************\n");
        printf("\t1:按姓名查找\n");
        printf("\t2:按学号查找\n");
        printf("\t3:列出所有学生信息\n");
        printf("\t4:返回\n");
        printf("*************************\n");
        printf("请选择1--4 : ");
        scanf("%d", &choose);
        switch (choose)
        {
        case 1: selecetname();break;
        case 2: selecetnum();break;
        case 3: selecet();break;
        case 4: Menu();break;
        default: printf("你的选择不正确 请重新选择\n");
        }
    }
    system("pause");
}
//***************************************************************
void selecetname()
{
    int index;
    char name[20];
    printf("请输入要查找的学生姓名:");
    scanf("%s", name);
    FILE * fp = fopen("test.txt", "r");
    if (!fp)
    {
        printf("打开文件失败!");
        return;
    }
    while (1)
    {
        
        index = ftell(fp);
        if (5 != fscanf(fp, "姓名:%8s  学号:%5s 语文成绩:%3d 数学成绩:%3d 英语成绩:%3d\n",
            stu.name, stu.num, &stu.Sore[0], &stu.Sore[1], &stu.Sore[2]))
        {
            printf("没有这个学生的相关信息.\n");
            break;
        }
//                fseek(fp, index, 0);
        if (strcmp(stu.name, name) == 0)
        {
            //fseek(fp, index, 0);
            printf("姓名:%8s  学号:%5s 语文成绩:%3d 数学成绩:%3d 英语成绩:%3d\n",
                stu.name, stu.num, stu.Sore[0], stu.Sore[1], stu.Sore[2]);
            break;
        }
//        break;
    }
    
    system("pause");
}
//******************************************************************
void selecetnum()
{
    int index;
    char num[10];
    printf("请输入要查找的学生学号:");
    scanf("%s", num);
    FILE * fp = fopen("test.txt", "r");
    if (!fp)
    {
        printf("打开文件失败!");
        return;
    }
    while (1)
    {
        
        index = ftell(fp);
        if (5 != fscanf(fp, "姓名:%8s  学号:%5s 语文成绩:%3d 数学成绩:%3d 英语成绩:%3d\n",
            stu.name, stu.num, &stu.Sore[0], &stu.Sore[1], &stu.Sore[2]))
        {
            printf("没有这个学生的相关信息.\n");
            break;
        }
//                fseek(fp, index, 0);
        if (strcmp(stu.num, num) == 0)
        {
            //fseek(fp, index, 0);
            printf("姓名:%8s  学号:%5s 语文成绩:%3d 数学成绩:%3d 英语成绩:%3d\n",
                stu.name, stu.num, stu.Sore[0], stu.Sore[1], stu.Sore[2]);
            break;
        }
//        break;
    }
    
    system("pause");
}
//****************************************************************************
void change()
{
    char ch;
    char num[20];
    int index;
    FILE * fp = fopen("test.txt", "r+");
    if(!fp)
    {
        printf("无学生记录!\n");
        return;
    }
    printf("请输入您要修改的学生的学号:");
        scanf("%s", num);
    while (1)
    {
        index = ftell(fp);
        if (5 != fscanf(fp, "姓名:%8s  学号:%5s 语文成绩:%3d 数学成绩:%3d 英语成绩:%3d\n",
            stu.name, stu.num, &stu.Sore[0], &stu.Sore[1], &stu.Sore[2]))
        {
            printf("没有这个学生的相关信息.\n");
            break;
        
        }            
        if (strcmp(stu.num, num) == 0)
        {
            fseek(fp,index,0);
            printf("姓名:%8s  学号:%5s 语文成绩:%3d 数学成绩:%3d 英语成绩:%3d\n",
            stu.name, stu.num, stu.Sore[0], stu.Sore[1], stu.Sore[2]);
            printf("您确定要修改该学生信息(y/n)");
            scanf(" %c", &ch);
            if (ch == 'y'||ch=='Y')
            {
                printf("请输入姓名:");
                scanf("%s", stu.name);
                                
                printf("请输入学号:");
                scanf("%s", stu.num);

                printf("请输入语文成绩:");
                scanf("%d", &stu.Sore[0]);

                printf("请输入数学成绩:");
                scanf("%d", &stu.Sore[1]);

                printf("请输入英语成绩:");
                scanf("%d", &stu.Sore[2]);
                
                fprintf(fp,"姓名:%8s  学号:%5s 语文成绩:%3d 数学成绩:%3d 英语成绩:%3d\n",
            stu.name, stu.num, stu.Sore[0], stu.Sore[1], stu.Sore[2]);
                printf("修改成功!\n");
//                getch();
                break;
            }
//            else
//                printf("没有该学生记录,请核对!\n");
        }
    }
    fclose(fp);
    system("pause");
}
//*************************************************************
void SelectSort(int index)//按a排序
{
    StudentInfo stu1[20];
    StudentInfo stu2;
    int i, j;
    int temp;
//    int t;
    int count = 0;
    FILE * fp = fopen("test.txt", "r");
    if (!fp)
    {
        printf("打开文件失败!");
        return;
    }
    while (1)
    {
        if (5 != fscanf(fp, "姓名:%8s  学号:%5s 语文成绩:%3d 数学成绩:%3d 英语成绩:%3d\n",
            stu1[count].name, stu1[count].num, &stu1[count].Sore[0], &stu1[count].Sore[1], &stu1[count].Sore[2]))
            break;
        count++;
    }
    for (i = 1;i < count;i++)
    {
        j = i;
        temp = stu1[j].Sore[index];
        stu2=stu1[j];
        while (j >= 1 && temp > stu1[j - 1].Sore[index])
        {
            stu1[j].Sore[index]= stu1[j - 1].Sore[index];
            stu1[j]=stu1[j-1];
            j--;
        }
        stu1[j].Sore[index] = temp;
        stu1[j]=stu2;
    }
    for (i = 0;i < count;i++)
    {
        printf("姓名:%8s  学号:%5s 语文成绩:%3d 数学成绩:%3d 英语成绩:%3d\n",
            stu1[i].name, stu1[i].num, stu1[i].Sore[0], stu1[i].Sore[1], stu1[i].Sore[2]);
    }
    fclose(fp);
    
    

    system("pause");
}
//**************************************************************************
void SelectSort1(int index)//按a排序
{
    StudentInfo stu1[20];
    StudentInfo stu2;
    int i, j;
    int temp;
//    int t;
    int count = 0;
    FILE * fp = fopen("test.txt", "r");
    if (!fp)
    {
        printf("打开文件失败!");
        return;
    }
    while (1)
    {
        if (5 != fscanf(fp, "姓名:%8s  学号:%5s 语文成绩:%3d 数学成绩:%3d 英语成绩:%3d\n",
            stu1[count].name, stu1[count].num, &stu1[count].Sore[0], &stu1[count].Sore[1], &stu1[count].Sore[2]))
            break;
        count++;
    }
    for (i = 1;i < count;i++)
    {
        j = i;
        temp = stu1[j].Sore[index];
        stu2=stu1[j];
        while (j >= 1 && temp > stu1[j - 1].Sore[index])
        {
            stu1[j].Sore[index]= stu1[j - 1].Sore[index];
            stu1[j]=stu1[j-1];
            j--;
        }
        stu1[j].Sore[index] = temp;
        stu1[j]=stu2;
    }
    for (i = 0;i < count;i++)
    {
        printf("姓名:%8s  学号:%5s 语文成绩:%3d 数学成绩:%3d 英语成绩:%3d\n",
            stu1[i].name, stu1[i].num, stu1[i].Sore[0], stu1[i].Sore[1], stu1[i].Sore[2]);
    }
    fclose(fp);
    
    

    system("pause");
}
//*******************************************************************
void SelectSort2(int index)//按a排序
{
    StudentInfo stu1[20];
    StudentInfo stu2;
    int i, j;
    int temp;
//    int t;
    int count = 0;
    FILE * fp = fopen("test.txt", "r");
    if (!fp)
    {
        printf("打开文件失败!");
        return;
    }
    while (1)
    {
        if (5 != fscanf(fp, "姓名:%8s  学号:%5s 语文成绩:%3d 数学成绩:%3d 英语成绩:%3d\n",
            stu1[count].name, stu1[count].num, &stu1[count].Sore[0], &stu1[count].Sore[1], &stu1[count].Sore[2]))
            break;
        count++;
    }
    for (i = 1;i < count;i++)
    {
        j = i;
        temp = stu1[j].Sore[index];
        stu2=stu1[j];
        while (j >= 1 && temp > stu1[j - 1].Sore[index])
        {
            stu1[j].Sore[index]= stu1[j - 1].Sore[index];
            stu1[j]=stu1[j-1];
            j--;
        }
        stu1[j].Sore[index] = temp;
        stu1[j]=stu2;
    }
    for (i = 0;i < count;i++)
    {
        printf("姓名:%8s  学号:%5s 语文成绩:%3d 数学成绩:%3d 英语成绩:%3d\n",
            stu1[i].name, stu1[i].num, stu1[i].Sore[0], stu1[i].Sore[1], stu1[i].Sore[2]);
    }
    fclose(fp);
    
    

    system("pause");
}
我这段代码要怎么才能正确输入密码?我试了输入密码之后回车没反映, 要回车两次才有效果,但是密码就会报错了。
2013-01-22 21:38
lsh106665347
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2013-1-6
收藏
得分:0 
程序代码:
struct StudentUser
{
    char UserName[15];
    char PassWord[15];
};
bool IsExist(char *name,char *pw);//验证帐号跟密码
int Menu();//菜单选择函数
void Sort();//排序选择函数
void selecet();
void insert();
void exmima();
void selecetlist();
void selecetname();
void selecetnum();
void save();
void exstu();
void change();
void SelectSort(int index);
void SelectSort1(int index);
void SelectSort2(int index);
   这个是上面包含的头文件#include "student.h"
2013-01-22 21:39
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
给了你代码,你又要自己另外弄一个,弄到的又不会用,不知道。

授人以渔,不授人以鱼。
2013-01-23 17:00
lsh106665347
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2013-1-6
收藏
得分:0 
回复 18楼 TonyDeng
额,代码效果一样啊,要怎么和整个程序融合才是关键撒。。求指教!!!
2013-01-24 22:43
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
我那个是跟传入的正确密码比较了返回输入是否正确的,而你那个是纯粹敲键盘的没结果的,你还用它来计数。这样都说效果一样?

[ 本帖最后由 TonyDeng 于 2013-1-24 23:16 编辑 ]

授人以渔,不授人以鱼。
2013-01-24 23:04
快速回复:C语言密码问题
数据加载中...
 
   



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

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