把字符型的数据当成整型scanf的有关问题

把字符型的数据当成整型scanf的问题?
从屏幕读入一个整型,如果输入一个字符,会怎样?
do
{
          fflush(stdin);
          printf( "请输入4个数字,用空格分开: ");
          scanf( "%d%d%d%d ",&guess[0],&guess[1],&guess[2],&guess[3]);  
          //guess是整型数组
          //printf( "%d,%d,%d,%d ",guess[0],guess[1],guess[2],guess[3]);
}while(!Check(guess));

我用e   1   2   3做输入,printf查看guess的时候输出4个-858993460,
换成其它字母也一样,而用1   2   e   4做输入,就只有后面两个是-858993460,
我想这个数字可能跟个人机器环境有关,但不明白为什么把字符做整型输入会这样?
而且还影响后面的输入?

工具是VC++,本人菜鸟,求达人指教...

------解决方案--------------------
scanf这个函数很“正规”,要求比较严格。在类型上我们最好保持一致,否则出了错也不易排查。

#include <stdio.h>

void main(void)
{
int arr[4];
int iloop=0;

memset(arr,0,4*sizeof(int));

scanf( "%d %d %d %d ",&arr[0],&arr[1],&arr[2],&arr[3]);

for(iloop=0;iloop <4;iloop++)
{
printf( "%d\n ",arr[iloop]);
}

}
------解决方案--------------------
int guess[4]; //栈内的空间为随机值,所以输入错误时会打印出该随机值。

memset(guess,0,4*sizeof(int));// 正如ls所示,为空间清0;

scanf( "%d %d %d %d ",&guess[0],&guess[1],&guess[2],&guess[3]); //非法字符时不会赋值
printf( "%d\t%d\t%d\t%d\n ",guess[0],guess[1],guess[2],guess[3]);//打印初始值0
------解决方案--------------------
scanf()函数返回正确接收的参数个数,你可以用if(scanf()==n)来判断是否接收了你所要求的参数个数,如果没有,输出结果不可预料,没什么奇怪的