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”,則在輸入數據時需要加“,”,如“2,3,4”.
printf("a=%d,b=%d,c=%d\n",a,b,c);
fflush(stdin);
system("pause");
return 0;
}
*/