您的位置:首页 > 其它

1067. 试密码(20)

2017-11-26 10:34 197 查看

原题: https://www.patest.cn/contests/pat-b-practise/1067

思路: 又是一题重点放在怎么读入数据的问题, 我采用的是这种

%[^\n]
,
题目没有说明用户输入的密码最大有多长, 本来我是想采用读取前21个字符
这种操作来判断的, 但测试点无法通过, 索性直接开个500位的大数组完事,
主要就是把以下特殊情况考虑到了, 就没问题了.

  1. 用户的输入长度不定
  2. 一个#是结束, 2个##就不是了. 遇到#立马就结束程序, 不要打印回车
  3. 用户的输入中间可能有空格之类乱七八糟的字符, 不能用scnaf直接读取
  4. 这一题不能采用截断的方法只读取前20个字符, 因为即便是错误的密码
    也要全部读取出来, 不然后面输出无法输出

实现:

#include <stdio.h>
#include <string.h>
#define LEN 21

int main (void) {
char rpwd[LEN]; // 正确密码
char upwd[500]; // 用户输入密码
int count;      // 可尝试次数

scanf("%s %d", rpwd, &count);
getchar(); // 回车挡掉

while (1) {
scanf("%[^\n]", upwd);
getchar(); // 回车挡掉
if (count == 0) {
printf("Account locked\n");
break; // 尝试次数为0结束
} else if (strcmp(upwd, "#") == 0) {
break; // 读到#结束
} else if (strcmp(upwd, rpwd) == 0) {
printf("Welcome in\n");
break; // 密码正确结束
} else {
printf("Wrong password: %s\n", upwd);
count--;
}
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: