标签:系统 ref 统一 blank getchar The stream div 测试
当你试图登录某个系统却忘了密码时,系统一般只会允许你尝试有限多次,当超出允许次数时,账号就会被锁死。本题就请你实现这个小功能。
输入格式:
输入在第一行给出一个密码(长度不超过 20 的、不包含空格、Tab、回车的非空字符串)和一个正整数 N(≤ 10),分别是正确的密码和系统允许尝试的次数。随后每行给出一个以回车结束的非空字符串,是用户尝试输入的密码。输入保证至少有一次尝试。当读到一行只有单个 # 字符时,输入结束,并且这一行不是用户的输入。
输出格式:
对用户的每个输入,如果是正确的密码且尝试次数不超过 N,则在一行中输出
Welcome in
,并结束程序;如果是错误的,则在一行中按格式输出Wrong password: 用户输入的错误密码
;当错误尝试达到 N 次时,再输出一行Account locked
,并结束程序。输入样例 1:
Correct%pw 3 correct%pw Correct@PW whatisthepassword! Correct%pw #
输出样例 1:
Wrong password: correct%pw Wrong password: Correct@PW Wrong password: whatisthepassword! Account locked
输入样例 2:
cool@gplt 3 coolman@gplt coollady@gplt cool@gplt try again #
输出样例 2:
Wrong password: coolman@gplt Wrong password: coollady@gplt Welcome in
1 #include <cstdio> 2 #include <cstring> 3 #include <cctype> 4 #include <iostream> 5 #include <sstream> 6 #include <cmath> 7 #include <algorithm> 8 #include <string> //string 9 #include <stack> 10 #include <queue> 11 #include <vector> 12 #include <map> 13 using namespace std; 14 15 int main() 16 { 17 string cpw, pw; 18 int n; 19 cin >> cpw >> n; 20 getchar(); 21 int cnt = 0; 22 while(getline(cin, pw)) 23 { 24 if(pw == "#") 25 break; 26 else if(pw != cpw) 27 { 28 cout << "Wrong password: " << pw << endl; 29 cnt++; 30 if(cnt >= n) 31 { 32 printf("Account locked\n"); 33 break; 34 } 35 } 36 else 37 { 38 cout << "Welcome in" << endl; 39 break; //密码正确结束程序 40 } 41 } 42 return 0; 43 }
首发测试点2、5错。猜测是用户输入的密码里可能不小心带有了空格等。于是改用getline()输入,结果全部答案错误。在输入正确密码和次数后用getchar()吸收回车就解决。其次,发现PTA其实是个不是很苛刻的oj (可能是我认知太少造成的片面误解)。
使用getline()前要用getchar()吸收回车。
标签:系统 ref 统一 blank getchar The stream div 测试
原文地址:https://www.cnblogs.com/Anber82/p/11439456.html