C語言遇到的關於清除標準輸入緩衝區的問題[編程入門]

關於標準輸入緩衝區的一個易犯的小錯誤

以前寫了個簡易的登陸程序,但顯然這不像寫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)!
因而,我開啓了那神聖的「調試」功能,把每個變量都放入到檢測環境中去:
圖1 檢測變量
而後咱們觀察每一步的「每一個變量」值得變化!設計

因而,我發如今第二次輸入密碼數據時,也就是數組 aPassword[0] 的第一個字符並非指望的數字,而是一個 「\n」。
圖2 讀取前
圖3 讀取後
看來問題顯而易見了!
第二次輸入密碼數據時,因爲前面存在的 「\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;
}

運行結果以下:

  • 登陸成功
    圖4 登陸成功
  • 登錄失敗
    圖5 登陸失敗
QQ羣:1035426849

歡迎小白、大佬的加入(@^0^@)/get

相關文章
相關標籤/搜索