以前写了个简易的登陆程序,但显然这不像写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); 命令便可刷新标准输入缓冲区。code
#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^@)/get