B1067 試密碼 (20 分)

題目

當你試圖登錄某個系統卻忘了密碼時,系統一般只會允許你嘗試有限多次,當超出允許次數時,賬號就會被鎖死。本題就請你實現這個小功能。
輸入格式:
輸入在第一行給出一個密碼(長度不超過 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、注意一行密碼輸入中,可以有空白字符,此時應該輸入整行
2、當錯誤次數爲 N 時立即輸出 Account locked

如何讀取空白字符爲字符串(學藝不精,只學了讀取char字符數組的空白字符串)

scanf("%[^\n]", str_try[i]);

%[^\n] 表示除了 換行符號 都可以 存入 字符串 c中
如果僅爲\n也不會被跳過,不會像%s那樣被當做還未輸入這個字符串,而是被寫爲空字符串

注意

  1. 輸入時,此題輸入正確密碼的時候直接用%s即可,在判斷密碼是才需要考慮是否爲空字符串(輸入的密碼爲空的情況)並使用%[^\n]

  2. 輸出時不可用%[^\n](因爲輸入的時候就沒存\n),直接用%s輸出空白字符串即可

void scn(){
	scanf("%s", str);
	scanf("%d", &N);
	getchar();
	int i = 0;
	scanf("%[^\n]", str_try[i]);
	getchar();
	while (strcmp(str_try[i], "#") != 0){
		if (pan(i))return;
		i++;
		scanf("%[^\n]", str_try[i]);
		getchar();
		
	}
	return;
}

AC代碼

#include<stdio.h>
#include<iostream>
#include<string>
using namespace std;
char str[25], str_try[30][25];//密碼 
int N;
bool pan(int i){
	if (strcmp(str_try[i], str) != 0){
		printf("Wrong password: %s\n", str_try[i]);
		if (i == (N - 1)){
			cout << "Account locked";
			return true;
		}
		return false;
	}
	else{
		cout << "Welcome in";
		return true;
	}
}
void scn(){
	scanf("%s", str);
	scanf("%d", &N);
	getchar();
	int i = 0;
	scanf("%[^\n]", str_try[i]);
	getchar();
	while (strcmp(str_try[i], "#") != 0){
		if (pan(i))return;
		i++;
		scanf("%[^\n]", str_try[i]);
		getchar();
		
	}
	return;
}

int main()
{
	scn();
	system("PAUSE");
	return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章