编译错误:" Stray 302",在函数int86上

时间:2015-12-03 05:16:21

标签: c++ c

我在代码块中编写了这个程序,但我在int86(0x33,®s,®s);中遇到错误错误302。我的节目是

#include<stdio.h>
#include<dos.h>
#include<conio.h>
#include<graphics.h>

void theend();

static int mask[]={/*SCREEN MASK*/
           0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
           0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
                   0x0000,0x0000,
           /*CURSOR MASK*/
           0x0000,0x0000,0x381c,0x7c3e,0x7c3e,0x7c3e,0x7c3e,
           0x3bdc,0x07e0,0x0ff0,0x0ff0,0x0ff0,0x0ff0,0x07e0,
           0x03c0,0x0000};


void main()
{int gdriver=DETECT,gmode,buttons;
 union REGS regs;
 struct SREGS sregs;
 initgraph(&gdriver,&gmode,"");
 regs.x.ax=0;                        /*INITIALIZE MOUSE*/
 int86(0x33,®s,®s);
 setcolor(LIGHTCYAN);
 if(regs.x.ax==0)
   {outtextxy(0,0,"NO MOUSE AVAILABLE");
    getch();
    theend();
   }
 regs.x.ax=9;                       /*CHANGE CURSOR SHAPE*/
 regs.x.bx=5;
 regs.x.cx=0;
 regs.x.dx=(int)mask;
 segread(&sregs);
 sregs.es=sregs.ds;
 int86x(0x33,®s,®s,&sregs);
 regs.x.ax=1;                       /*SHOW MOUSE POINTER*/
 int86(0x33,®s,®s);
 do
   {regs.x.ax=3;
    int86(0x33,®s,®s);
    buttons=regs.x.bx & 3;
   }while(buttons!=3);
 regs.x.ax=2;                       /*HIDE MOUSE POINTER*/
 int86(0x33,®s,®s);
 theend();
}

void theend()
{closegraph();}

我找到了一些关于dos.h文件的博客。是否可以查看dos.h文件?新dos.h文件与旧dos.h文件之间是否存在差异?

1 个答案:

答案 0 :(得分:4)

我认为你的编辑有问题。它已将&reg更改为注册商标符®,这是C程序中的无效符号。

编译错误“stray \ 302”表示程序中包含无效字符。在您的情况下,角色为®。您应该将第int86(0x33,®s,®s)行更改为int86(0x33, &regs, &regs);

对于函数调用int86,第二个参数是输入寄存器,第三个参数是输出寄存器。我想你正在尝试使用regs。请注意,最好为输入和输出使用两个单独的变量。 Documentation for int86().