PAT1067-----正则表达式的进一步了解,程序对输入的程序的操作(键盘缓冲区)

当你试图登录某个系统却忘了密码时,系统一般只会允许你尝试有限多次,当超出允许次数时,账号就会被锁死。本题就请你实现这个小功能。

输入格式:

输入在第一行给出一个密码(长度不超过 20 的、不包含空格、Tab、回车的非空字符串)和一个正整数 N(≤ 10),分别是正确的密码和系统允许尝试的次数。随后每行给出一个以回车结束的非空字符串,是用户尝试输入的密码。输入保证至少有一次尝试。当读到一行只有单个 # 字符时,输入结束,并且这一行不是用户的输入。

输出格式:

对用户的每个输入,如果是正确的密码且尝试次数不超过 N,则在一行中输出 Welcome in,并结束程序;如果是错误的,则在一行中按格式输出 Wrong password: 用户输入的错误密码;当错误尝试达到 N 次时,再输出一行 Account locked,并结束程序。

输入样例 1:

Correct%pw 3
correct%pw
[email protected]
whatisthepassword!
Correct%pw
#

输出样例 1:

Wrong password: correct%pw
Wrong password: [email protected]
Wrong password: whatisthepassword!
Account locked

输入样例 2:

[email protected] 3
[email protected]
[email protected]
[email protected]
try again
#

输出样例 2:

Wrong password: [email protected]
Wrong password: [email protected]
Welcome in
/*
 * (字符的读取,可回顾1054. 求平均值)
 * PS:用户输入的长度未知,可通过 创建大容量的字符数组 解题;
 */
#include <stdio.h>
#include <string.h>

int main() {
    int N;
    char c, password[21], user[21];
    scanf("%s %d", password, &N);
    getchar();//读掉回车
    while(N--) {//允许尝试的次数
        scanf("%20[^\n]", user);//读取回车之前的字符,最多20位 (存在读了20位,还没有读完输入的情况)
        c = getchar();
        if(!strcmp(user, "#") && c == ‘\n‘) {//输入的是 #,结束
            break;
        } else if(!strcmp(password, user) && c == ‘\n‘) {//输入的是正确答案,结束
            printf("Welcome in\n");
            break;
        } else {//错误答案
            printf("Wrong password: %s%c", user, c);
            while(c != ‘\n‘) {//输入的密码位数很多,读取直到回车
                c = getchar();
                printf("%c", c);
            }
            if(!N) {//尝试次数结束,输出
                printf("Account locked\n");
            }
        }
    }
    return 0;
}

原文地址:https://www.cnblogs.com/BananaMan/p/11323557.html

时间: 2024-10-26 04:33:17

PAT1067-----正则表达式的进一步了解,程序对输入的程序的操作(键盘缓冲区)的相关文章

C#/VB.NET Winform程序自定义输入光标

本文转载自真有意思网(http://www.zu14.cn) 作者:三角猫 DeltaCat摘要:C#/VB.NET Winform程序自定义输入光标的实现,我们可以通过调用Windows 提供的一套对输入光标进行控制的API进行操作...... Windows 提供了一套对输入光标进行控制的API, 包括:CreateCaret,SetCaretPos,DestroyCaret,ShowCaret,HideCaret.这些API的定义如下: [DllImport("user32.dll&quo

C语言编程之--scanf()函数与getchar()函数搭配来理解C程序的输入缓存(buffer)

博主最近在学习C语言编程,在书中的代码示例中出现了下面的代码段: #include<stdio.h> int main() { char a[5]; int i; printf("请依次输入值:\n"); for(i=0;i<5;i++) { scanf("%c",&a[i]); getchar(); //为什么要加一个getchar()? } printf("\n"); for(i=0;i<5;i++) { pr

C# 使用js正则表达式,让文本框只能输入数字和字母,最大长度5位

使用js正则表达式,让文本框只能输入数字和字母,最大长度5位,只需要加个onkeyup事件,即可简单实现 <asp:TextBox ID="txtBegin" runat="server" size="5" maxlength="5" onkeyup="value=value.replace(/[^\a-\z\A-\Z0-9]/g,'')"></asp:TextBox> C# 使用j

c语言:编写一个程序,输入a,b,c三个值,输出其中最大者

程序: //编写一个程序,输入a,b,c三个值,输出其中最大者 #include<stdio.h> int main() { int a,b,c,max; printf("请输入三个数:"); scanf("%d,%d,%d",&a,&b,&c); max=a; if (max<b) { max=b; } if (max<c) { max=c; } printf("%d\n",max); retur

Linux - 输入输出流程序 代码(C)

输入输出流程序 代码(C) 本文地址:http://blog.csdn.net/caroline_wendy 使用输入输出流,控制文件流. STDIN_FILENO,STDOUT_FILENO代表标准输入和标准输出的文件描述符. 执行文件使用"./", 结束文件"Ctrl+D". 代码: /*By C.L.Wang * Eclipse CDT * Ubuntu 12.04 * 2014.10.5*/ #include "apue.h" #incl

序列化(ObjectOutputStream和ObjectInputStream)(切记:out是输出到本地中,in是输入到程序中)

注意:序列化自定义类必须实现一个接口Serializable,在c#中序列化自定义类是使用特性也就是[Serializable] //要实现序列化的类 public class Student implements Serializable { /**  *   */ private static final long serialVersionUID = 1L;//序列版本号 private String name; private int age; public Student(String

[au3]批量输入号码程序

批量输入号码程序 这个文件可以随时产生一个剪贴板文字的文本文件,以供其他程序读取. 这个程序修改了许多次了,主要是针对网络延迟的问题. 最终找到了解决方案:探测输入的界面的反馈信息,也就是反馈的颜色.当输入完成以后界面恢复到正常,再开始输入另外一个号码. Global $Paused HotKeySet("{PAUSE}", "TogglePause") HotKeySet("{ESC}", "Terminate") Auto

DataInputStream(二进制输入流)和DataOutputStream二进制输出流(注意:in是从本地文件输入到程序中,out是从程序输出到本地种)

//切记以数据类型输出就以什么数据类型读入, //例如: dos.writeInt(100);写入,读取:dis.readUTF()有时会出现意想不到的错误,所以要时刻记得以数据类型输出就以什么数据类型读入 //DataInputStream(二进制输入流) public class DataInputStreamDemo { //二进制流(读操作) public static void main(String[] args) { FileInputStream fis = null; Data

FileOutputStream字节输出流和FileInputStream输入流(切记:out是输出到本地中,in是输入到程序中)这里介绍大文件和小文件的读取方式

//FileOutputStream public class FileOutputStreamDemo { /**字节流:适用于任何文件,以字节为单位,进行读写操作  *字节流操作步骤:  *1.创建文件对象  *2.创建字节流  *3.读写操作  *4.关闭流  */ //字节流(写操作) public static void main(String[] args) { String messageString = "hello world";  byte[] bytes = me