题目是说接受一个整型输入,如果不是整型就报错,直到正确为止:
我的程序:
#include
int main()
{
int n,j;
j=scanf("%d",&n);
do
{
scanf("%d",&n);
getchar();
printf("输入错误\n");
}while(j==0);
printf("%d",&n);
return 0;
}
毛病出在哪里?求大神赐教
int n,j;
你定义的时候应该定义成字符,然后对输入的字符进行判断,是不是只有数字和负号(有负号的话,是不是以负号开头的)?是不是不是以0开头的?
这么判断,我觉得才是对的。
char c[20];
先判断一层,c里只有数字和负号(可以用ASCII码,0-9是48到57,-是45 也可以用‘1’,‘2’这样的形式)
然后再判断c[0]!='0'并且当c[0]=='-'时,c[1] != '0'
这样就差不多是整型数了。
还是有一定复杂度,需要判断是否有负号,还有可能用户只输入负号。
代码如下,测试通过。
#include<stdio.h>
#include<stdlib.h> //included to use atoi()
#include<ctype.h> //included to use isalpha()
#pragma warning( disable : 4996)
int main(void)
{
char number[10];//假设最长可以输入10位(基本也够用了)
int flag = 0;
do
{
printf("请输入合法整型数: \n");
scanf("%s", number);
if (number[0] == '-')//负号开头
{
int j = 1;
while (number[j] != '\0' && j < 9)
{
if (!isdigit(number[j]))
{
flag = 1;
}
j++;
}
if (j == 1)
{
flag = 1;// 如果用户只输入'-'这一个字符
}
}
else//不是负号开头
{
int m = 0;
while (number[m] != '\0' && m < 9)
{
if (!isdigit(number[m]))
{
flag = 1;
}
m++;
}
}
if (flag)
{
printf("不是合法的整型数\n");
flag = 0;
continue;
}
else
{
break;
}
} while (1);
if (flag == 0)
{
printf("您输入的整型数为: %d\n", atoi(number));
}
return 0;
}