把字符型的数据当成整型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)来判断是否接收了你所要求的参数个数,如果没有,输出结果不可预料,没什么奇怪的
从屏幕读入一个整型,如果输入一个字符,会怎样?
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)来判断是否接收了你所要求的参数个数,如果没有,输出结果不可预料,没什么奇怪的