scanf()函数的疑惑

a62701255   2007-4-28 07:50 楼主
void change(char data *pr,char data *pt);

//c主程序声明
void main(void)
{   
    char data *a,*b,x,y;        //定义使用变量

   
    //设定串口的数据传输为1200bps 晶振为1600MHZ   
#ifndef MONITOR51
    SCON=0x50;        //SCON:8位异步通讯模式
    TMOD|=0x20;        //TMOD:定时器1为模式2,8-bit自动装载方式
    TH1=221;            //TH1:1200bps的装载值@16MHZ
    TR1=1;                //TR1:timer1运行
    TI=1;                  //T1:设置为1,以发送第一个字节
#endif


    printf("please input the number x,y\n");
    //puts(&x);
    //puts(&y);
    scanf("%d%d\n",&x,&y);
    //printf("please input the number y\n");
    //scanf("%d",&y);
    if(x     {
        *a=x;
        *b=y;
        change(a,b);
    }
    printf("max=%d\nmin=%d\n",*a,*b);
    printf("max=%d\nmin=%d\n",x,y);
    while(1)
    {;}

}

//数据交换函数声明
void change( char data *pr,char data *pt)
{
    char data temp;
    temp=*pr;
    *pr=*pt;
    *pt=temp;
    return;
}


程序指针问题
在程序运行后,在输入数据后,程序不能正确的计算。
在输入数据11<空格>12<回车>后程序不能运行,在回车,还是不能运行,等输入其他字符后"1"程序运行,但是运行结果不是
想要得到的,帮忙解决问题,谢谢

回复评论 (2)

主要问题是数据类型和指针运用不对,试试下面的代码应该可以实现你的目的

void main(void)
{   
    char data x,y;        //定义使用变量

    //设定串口的数据传输为1200bps 晶振为16MHZ   
#ifndef MONITOR51
    SCON=0x50;        //SCON:8位异步通讯模式
    TMOD|=0x20;        //TMOD:定时器1为模式2,8-bit自动装载方式
    TH1=221;            //TH1:1200bps的装载值@16MHZ
    TR1=1;                //TR1:timer1运行
    TI=1;                  //T1:设置为1,以发送第一个字节
#endif

    printf("please input the number x,y\n");
    //puts(&x);
    //puts(&y);
    scanf("%bd%bd",&x,&y);
    //printf("please input the number y\n");
    printf("x=%bd\ny=%bd\n",x,y);
    if(x     {
        change(&x,&y);
    }
//    printf("max=%d\nmin=%d\n",*a,*b);
    printf("max=%bd\nmin=%bd\n",x,y);
    while(1)
    {;}

}

//数据交换函数声明
void change( char data *pr,char data *pt)
{
    char data temp;
    temp=*pr;
    *pr=*pt;
    *pt=temp;
    return;
}
点赞  2007-4-28 15:18
KEIL里扩展出了
b,h,l来对输入字节宽的设置:
b八位
h十六位
l三十二位

LZ少的是这个
点赞  2007-4-29 09:53
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复