以前寫了個簡易的登陸程序,但顯然這不像寫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