對模擬登陸代碼的理解

<span style="white-space:pre">	</span>#include <stdio.h>
	#include <string.h>
	int main() {
	char buf[10] = {};
	int num = 0;
	for (num = 1;num <= 3;num++) {
		printf("請輸入用戶名:");
		fgets(buf, 10, stdin);
		if (strlen(buf) == 9 && buf[8] != '\n') {
			scanf("%*[^\n]");
			scanf("%*c");
		}
		if (strcmp(buf, "admin\n")) {
			continue;
		}
		printf("請輸入密碼:");
		fgets(buf, 10, stdin);
		if (strlen(buf) == 9 && buf[8] != '\n') {
			scanf("%*[^\n]");
			scanf("%*c");
		}
		if (strcmp(buf, "123456\n")) {
			continue;
		}
		break;
	}
	if (num <= 3) {
		printf("登陸成功\n");
	}
	else {
		printf("登陸失敗\n");
	}
	return 0;
}

	scanf("%*[^\n]");//*是拿出來不保存 可以理解爲丟棄 ^是除了的意思 也就是丟掉所有不爲\n的字符,直到遇到\n結束
	scanf("%*c");

     continue是指結束一次的循環

            break是結束所有的循環

    首先鍵入的數據都先放入輸入緩衝區裏,然後再根據情況開始判斷怎麼拿,拿幾個數據

             如果鍵盤上鍵入  123\n    這個沒問題 buf[]={1,2,3,\n,\0}
            如果鍵入12345678\n ,正好也沒問題 buf[]={1,2,3,4,5,6,7,8,\n,\0}
            但是如果鍵入123456789\n   到了9的時候系統自動加上\0存到buf裏buf[]={1,2,3,4,5,6,7,8,9,\0},這個時候就有問題了,因爲緩衝區裏還留下了一個\n呀,所以要把\n拿出來丟掉。

            如果鍵入的數據更多,12345678999\n, 到了9的時候系統自動加上\0存到buf裏buf[]={1,2,3,4,5,6,7,8,9,\0},這個時候緩衝區裏留下的更多,則用scanf("%*[^\n]")先扔掉所有不爲\n的,再扔掉\n




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