C/C++緩衝區的刷新問題

c/c++語言平常寫程序的時候我們經常會遇到這樣的情況,本來直接輸入的是這樣的數據,然而在讀取輸出的時候卻不是我們輸入時的數據。這是爲什麼呢? 原因就是我們在輸入的時候留下了垃圾,而我們定義的某個變量接受的數據正是“垃圾”而不是我們想要的數據。總結一下C、C++中清除垃圾的方法:

這裏寫代碼片
#include<stdio.h>
#include<stdlib.h>
/*
//1.
int main()
{
    int i;
    char ch;
    scanf("%d",&i);
    fflush(stdin);
    scanf("%c",&ch);
    printf("i=%d,ch=%d\n",i,ch);
    system("pause");
return 0;
}

*/
/*
//2.
int main()
{
    int i;
    char ch;
    scanf("%d",&i);
    getchar();//如果沒有getchar();則ch接受的數據將會是輸入時留下的垃圾
              //空格或者是回車;在這裏相當必要!!!
    scanf("%c",&ch);
    printf("i=%d,ch=%d\n",i,ch);
    system("pause");
return 0;
}
*/

//3.
//%*nc;  n的值是可以根據而要而改變的,表示的是 吸收的字符的個數。用法和 getchar()相像,只不過它可以很方便的改變吸收的字符的個數。
//例:
 #include<stdio.h>
int main()
{
    char ch;
    int i;

    scanf("%d",&i);
    scanf("%*c%c",&ch);// 如果沒有 %*c 輸出的ch是“垃圾”,加上後就正確了
    printf("i=%d,ch=%d\n",i,ch);
    system("pause");
return 0;
}

/*
int main(void);
{
int a,b,c;
printf("輸入a,b,c\n");
scanf("%d%d%d",&a,&b,&c);  //&a,&b,&c中的&是地址運算符,&a指a在內存中的地址。scanf的作用是:按照a,b,c的內存地址將輸入的數據存到a,b,c中去。變量a,b,c的地址是在編譯連續階段分配的(存儲順序由編譯器決定)。
//這裏注意:如果scanf中%d是連着寫的如“%d%d%d”,在輸入數據時,數據之間不可以加逗號,只能是空格或tab鍵或者回車鍵——“2 3 4” 或 “2(按tab)3(按tab)4(按tab)”。若是“%d%d%d”,則在輸入數據時需要加“,”,如“234”.
printf("a=%d,b=%d,c=%d\n",a,b,c);
fflush(stdin);
system("pause");
return 0;
}
*/
發佈了39 篇原創文章 · 獲贊 1 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章