<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