急!求大神赐教,在线等

题目是说接受一个整型输入,如果不是整型就报错,直到正确为止:
我的程序:
#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;
}