您的位置:首页 > 编程语言

对模拟登陆代码的理解

2016-05-29 17:53 281 查看
<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


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: