对模拟登陆代码的理解
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
#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
相关文章推荐
- Python2学习笔记(3)
- c++ 指向类成员函数的函数指针
- 用pandas分析百万电影数据
- C语言实现一个简单的词法分析器
- GCC扩展(转--对看kernel代码有帮助
- c++输出流cout的
- java笔记之重写,抽象
- Python的100道经典算法题(1)
- spring MVC配置详解
- 《C++ Primer》 chapter 15 TextQuery
- python遇到SyntaxError: Non-ASCII character '\xc3' in file pic2char.py on line 4, but coding declared;
- Eclipse乱码解决方案总结(UTF-8 <---> GBK)
- [c++] stack的使用
- 基于PHP的sso单点登录实例
- java集合入门
- python3学习记录——安装pyspider中lxml安装问题
- C语言++问题
- php笔记(10)——面向对象之魔术方法
- Lua的内存监测和回收
- Java 理论与实践: 正确使用 Volatile 变量