1067. 试密码(20)

原题: 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;
}

posted @ 2017-11-26 10:34  阿胜4K  阅读(531)  评论(0编辑  收藏  举报