c程序的数据输入问题
在tc编程里用scanf("%d,%d",&a,&b);,程序运行需要输入数据时,如果输入的格式不正确或者输入的数据类型不正确,比如输入字母,程序将出现严重的错误,应该如何避免这样的情况? 问题点数:30、回复次数:7Top
1 楼xiaott(我能睡觉吗)回复于 2002-10-09 18:42:18 得分 8
可以用:
if(a<='z'&&a>='a'||a<='Z'&&a>='A')
{printf("input error!");return;}
这类语句Top
2 楼hechang(大豆)回复于 2002-10-09 19:17:43 得分 0
只要,没有错就可以
当你输入字母时也不会错,会按字母的ASC11Top
3 楼hechang(大豆)回复于 2002-10-09 19:28:02 得分 0
只要,没有错就可以
当你输入字母时也不会错,会按字母的ASC11
值输入 但只能输入一个号码并要按格式输入
要是不是数字可以这样
if(a<=-2.0e15||a>=2.0e16)
{printf("input error!");return;}
Top
4 楼hechang(大豆)回复于 2002-10-09 19:29:04 得分 7
只要,没有错就可以
当你输入字母时也不会错,会按字母的ASC11
值输入 但只能输入一个号码并要按格式输入
要是不是数字可以这样
if(a<=-2.0e15||a>=2.0e16)
{printf("input error!");return;}
Top
5 楼dyhong(dyh_december)回复于 2002-10-09 19:36:26 得分 4
写程序时,加的注释,也就是if(a<=-2.0e15||a>=2.0e16)
{printf("input error!");return 这样的Top
6 楼stone112979(梦醒十分)回复于 2002-10-09 22:41:16 得分 3
up
加注释Top
7 楼MasterProgrammer(MasterSoft)回复于 2002-10-10 22:14:39 得分 8
对于这个问题有个比较笨的办法,就是自己控制输入,我常用的方法如下:
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <string.h>
const unsigned short BACKSPACE = 8;
const unsigned short RETURN = 13;
const unsigned short ESC = 27;
double GetNumber( void );
void main( void )
{
double fOne, fTwo;
printf("Input frist number:");
fOne = GetNumber();
printf("Input second number:");
fTwo = GetNumber();
printf("\nFirst num = %f, Second num = %f\n", fOne, fTwo );
return;
}
double GetNumber( void )
{
double fRetVal = 0;
char cTemp, caTemp[128] = "";
unsigned int i = 0, j = 1;
bool bSymbol = false, bPoint = false;
while( ( cTemp = getch() ) != RETURN )
{
if( '0' <= cTemp && cTemp <= '9' )
{
putch( cTemp );
caTemp[i++] = cTemp;
caTemp[i] = '\0';
continue;
}
switch( cTemp )
{
case '.':
if( bPoint == false )
{
putch( cTemp );
caTemp[i++] = cTemp;
bPoint = true;
}
break;
case '+':
case '-':
if( bSymbol == false && i == 0 )
putch( cTemp );
if( cTemp == '-' )
bSymbol = true;
break;
case BACKSPACE:
if( i == 0 )
{
bPoint = false;
bSymbol = false;
break;
}
i--;
if( caTemp[i] == '.' )
{
bPoint = false;
caTemp[i] = '\0';
break;
}
caTemp[i] = '0';
printf( "\b \b" );
break;
case ESC:
return 0;
default:
break;
}
caTemp[i] = '\0';
}
bPoint = false;
for( i = 0; i < strlen( caTemp ); i++ )
{
if( caTemp[i] == '.' )
{
bPoint = true;
continue;
}
if( bPoint == false )
fRetVal = fRetVal * 10 + caTemp[i] - 48;
else
fRetVal = fRetVal + (caTemp[i] - 48) * pow( 0.1, j++ );
}
if( bSymbol == true )
fRetVal = -1 * fRetVal;
printf("\n");
return fRetVal;
}
当输入数值时,只有按下Enter/Esc才返回值,并且只有按下数字键,+,-,.才有效.其中你可以控制输入的长度,如int的范围:-32768 - 32767,在输入的时候当i=4时(最大值9999)就返回值以确保其值有效.对于字符输入也是同样道理,其方法大致一样.(编译环境VC6)Top




