标签:用户登录 一个 ESS 入门 就是 环境 无法读取 出现 int
之前写了个简易的登录程序,但显然这不像写Java时那么容易(只要思路对,基本没问题)。一不留神就出现了小BUG!
#include <stdio.h>
#include <string.h>
/*
*作者:SeaFever
*功能:实现用户登录模拟
*开始创作:2020.2.3
*结束创作:
*/
int main()
{
char user[] = {"FAFA"},password[] = {"740151334"},aUser[4],aPassword[9];
// 读取用户名
int i,j;
printf("%s\n", "User:");
for (i=0;i<4;i++ ) {
if ((aUser[i] = getchar()) != '\n' ) {
} else {
break;
}
}
// 读取用户密码
printf("%s\n", "Password:");
for (j=0;j<9;j++ ) {
if ((aPassword[j] = getchar()) != '\n' ){
} else {
break;
}
}
// 判断用户名是否存在 -(true)-> 判断密码是否正确
if (strcmp(user, aUser) == 0 ) {
if (strcmp(password, aPassword) == 0 ) {
printf("%s\n", "Successful!O(∩_∩)O");
goto end;
}
}
printf("%s\n", "Failed!");
end:return 0;
}
本以为一切都设计的很不错,步步到位!但经过几次的编译运行,我都不能找到问题的所在!感觉设计的没问题啊o(TヘTo)!
于是,我开启了那神圣的“调试”功能,把每一个变量都放入到检测环境中去:
然后我们观察每一步的“每个变量”值得变化!
于是,我发现在第二次输入密码数据时,也就是数组 aPassword[0] 的第一个字符并不是期望的数字,而是一个 “\n”。
看来问题显而易见了!
第二次输入密码数据时,由于前面存在的 “\n” 未被清理掉,而导致 数组aPassword 无法读取到需要的的数据!
那么,我们在读取密码之前插入 fflush(stdin); 命令即可刷新标准输入缓冲区。
#include <stdio.h>
#include <string.h>
/*
*作者:SeaFever
*功能:实现用户登录模拟
*开始创作:2020.2.3
*结束创作:2020.2.4
*/
int main()
{
char user[] = {"FAFA"},password[] = {"740151334"},aUser[4],aPassword[9];
// 读取用户名
int i,j;
printf("%s\n", "User:");
for (i=0;i<4;i++ ) {
if ((aUser[i] = getchar()) != '\n' ) {
} else {
break;
}
}
fflush(stdin); //刷新标准输入缓冲区
// 读取用户密码
printf("%s\n", "Password:");
for (j=0;j<9;j++ ) {
if ((aPassword[j] = getchar()) != '\n' ){
} else {
break;
}
}
// 判断用户名是否存在 -(true)-> 判断密码是否正确
if (strcmp(user, aUser) == 0 ) {
if (strcmp(password, aPassword) == 0 ) {
printf("%s\n", "Successful!O(∩_∩)O");
goto end;
}
}
printf("%s\n", "Failed!");
end:return 0;
}
欢迎小白、大佬的加入(@^0^@)/
标签:用户登录 一个 ESS 入门 就是 环境 无法读取 出现 int
原文地址:https://www.cnblogs.com/seafever/p/12262257.html