<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