求C语言高手解决,程序有一处错误始终找不出来。下面是程序代码。回答好了追加100分啊!在线等、很急!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求C语言高手解决,程序有一处错误始终找不出来。下面是程序代码。回答好了追加100分啊!在线等、很急!相关的知识,希望对你有一定的参考价值。

#include<stdio.h>
#include<conio.h>
#include<dos.h>
#define FIRST_BOARD_HOOK_ADDRESS 0x260
#define OFFHOOK_QUEUE_SIZE 16
#define ONHOOK_QUEUE_SIZE 16
#define SUM_BOARD_3
int i;
unsigned char UM_offhook;
unsigned char Lm[1];
unsigned char Subs_Bit[8];
unsigned char OffHook_Queue[OFFHOOK_QUEUE_SIZE];
unsigned char OffHook_Spos,OffHook_Rpos,OffHook_Queue_Flag;
unsigned char OnHook_Queue[ONHOOK_QUEUE_SIZE];
unsigned char OnHook_Spos,OnHook_Rpos,OnHook_Queue_Flag;
unsigned char UM_OffHook_1,UM_OnHook_1;
void ScanFirstBoard(void);
main()
OffHook_Queue[0]=0;
OffHook_Spos=0;
OffHook_Rpos=0;
OffHook_Queue_Flag=0;
OnHook_Queue[0]=0;
OnHook_Spos=0;
OnHook_Rpos=0;
OnHook_Queue_Flag=0;
Lm[0]=0;
Subs_Bit[0]=0x01;
Subs_Bit[1]=0x02;
Subs_Bit[2]=0x04;
Subs_Bit[3]=0x08;
Subs_Bit[4]=0x10;
Subs_Bit[5]=0x20;
Subs_Bit[6]=0x40;
Subs_Bit[7]=0x80;
UM_OffHook_1=0;
UM_OnHook_1=0;
Outportb(0x369,0);
clrscr();
printf("Please offhook,check offhooksubscriber number.\n");
printf("Then onhook,checkonhooksubscriber number.\n");
for(;;)

If(kbhir())
Break;
Delay(20);
ScanFirstBoard();

Return0;

Void ScanFirstBoard()

unsigned char Scn;
unsigned char NewScan_OffHook;
unsigned char NewScan_OnHook;
unsigned char OldLm;
unsigned char CurrentBoardNum;
unsigned int JudgeWord;
int i;
CurrentBoardNum=0x01;
Scn=inportb(FIRSR_BOARD_HOOK-ADDRESS)&0xff;
JudgeWord=UM_OffHook_1 & Scn;
i=7;
while(JudgeWord!=0)

While((JudgeWord&Subs_Bir[i])!=Subs_Bit[i])
i--;
if(((OffHook_Spos+1)==OffHook_Rpos)||((OffHook_Spos==OFFHOOK_QUEUE_SIZE)&&(OffHook_Spos==0)))

Printf("OffHook_Queue is Full. Not Insert. \ n");

Else

OffHook_Queue[OffHook_Spos]=i;
printf("OffHook_Queue: BoardNum:%d,OffHook_Sub:%d\n",CurrentBoardNum,i+1);

JudgeWord=JudgeWord&(~Subs_Bit[i]);
i--;

printf("OffHook_Queue : %x\n",OffHook_Queue[OffHook_Spos]);
NewScan_OffHook=Scn;
OldLm=Lm[0];
UM_OffHook_1=NewScan_OffHook&(~OldLm);
NewScan_OnHook=Scn;
JudgeWord=UM_OnHook_ 1 &(~NewScan_OnHook);
i=7;
while(JudgeWord ! =0)

While((JudgeWord&Subs_Bit[i])!=Subs_Bit[i]
i--;
if(((OnHook_Spos+1)==OnHook_Rpos)||((OnHook_Spos==ONHOOK_QUEUE_SIZE)&&(OnHook_Rpos==0)))

Printf("OnHook_Queue is Full . Not Insert. \n");

else

OnHook_Queue[OnHook_Spos]=i;
printf("OnHook_Queue: %d,OnHook_Sub:%d \n");

JudgeWord=JudgeWord&(~Subs_Bit[i]);
i--;

NewScan_OnHook=Scn;
OldLm=Lm[0];
UM_OnHook_1=(~NesScan_OnHook)&OldLm;
Lm[0]=Scn;

错误是
--------------------Configuration: 008 - Win32 Debug--------------------
Compiling...
008.cpp
C:\Program Files\Microsoft Visual Studio\MyProjects\008\008.cpp(19) : error C2146: syntax error : missing ';' before identifier 'OffHook_Queue'
C:\Program Files\Microsoft Visual Studio\MyProjects\008\008.cpp(19) : fatal error C1004: unexpected end of file found
执行 cl.exe 时出错.

008.exe - 1 error(s), 0 warning(s)

错误原因主要有:1、C语言是大小写敏感的,注意一些函数和关键字的大小写,如:If和if的区别2、变量的名称错误3、调用的库函数没有头文件,如:inportb/outportb等。
下面的程序可以编译,但是连接时出现库函数没有说明的问题,请添加inportb/outportb对应的头文件!
#include <stdio.h>
#include <conio.h>
#include <dos.h>
# include <stdlib.h>
#define FIRST_BOARD_HOOK_ADDRESS 0x260
#define OFFHOOK_QUEUE_SIZE 16
#define ONHOOK_QUEUE_SIZE 16
#define SUM_BOARD_3
int i;
unsigned char UM_offhook;
unsigned char Lm[1];
unsigned char Subs_Bit[8];
unsigned char OffHook_Queue[OFFHOOK_QUEUE_SIZE];
unsigned char OffHook_Spos,OffHook_Rpos,OffHook_Queue_Flag;
unsigned char OnHook_Queue[ONHOOK_QUEUE_SIZE];
unsigned char OnHook_Spos,OnHook_Rpos,OnHook_Queue_Flag;
unsigned char UM_OffHook_1,UM_OnHook_1;
void ScanFirstBoard(void);
main()

OffHook_Queue[0]=0;
OffHook_Spos=0;
OffHook_Rpos=0;
OffHook_Queue_Flag=0;
OnHook_Queue[0]=0;
OnHook_Spos=0;
OnHook_Rpos=0;
OnHook_Queue_Flag=0;
Lm[0]=0;
Subs_Bit[0]=0x01;
Subs_Bit[1]=0x02;
Subs_Bit[2]=0x04;
Subs_Bit[3]=0x08;
Subs_Bit[4]=0x10;
Subs_Bit[5]=0x20;
Subs_Bit[6]=0x40;
Subs_Bit[7]=0x80;
UM_OffHook_1=0;
UM_OnHook_1=0;
outportb(0x369,0);
clrscr();
printf("Please offhook,check offhooksubscriber number.\n");
printf("Then onhook,checkonhooksubscriber number.\n");
for(;;)

if(kbhit())
break;
delay(20);
ScanFirstBoard();

return 0;

void ScanFirstBoard()

unsigned char Scn;
unsigned char NewScan_OffHook;
unsigned char NewScan_OnHook;
unsigned char OldLm;
unsigned char CurrentBoardNum;
unsigned int JudgeWord;
int i;
CurrentBoardNum=0x01;
Scn=inportb(FIRST_BOARD_HOOK_ADDRESS)&0xff;
JudgeWord=UM_OffHook_1 & Scn;
i=7;
while(JudgeWord!=0)

while((JudgeWord&Subs_Bit[i])!=Subs_Bit[i])
i--;
if(((OffHook_Spos+1)==OffHook_Rpos)||((OffHook_Spos==OFFHOOK_QUEUE_SIZE)&&(OffHook_Spos==0)))

printf("OffHook_Queue is Full. Not Insert. \ n");

else

OffHook_Queue[OffHook_Spos]=i;
printf("OffHook_Queue: BoardNum:%d,OffHook_Sub:%d\n",CurrentBoardNum,i+1);

JudgeWord=JudgeWord&(~Subs_Bit[i]);
i--;

printf("OffHook_Queue : %x\n",OffHook_Queue[OffHook_Spos]);
NewScan_OffHook=Scn;
OldLm=Lm[0];
UM_OffHook_1=NewScan_OffHook&(~OldLm);
NewScan_OnHook=Scn;
JudgeWord=UM_OnHook_1&(~NewScan_OnHook);
i=7;
while(JudgeWord!=0)

while((JudgeWord&Subs_Bit[i])!=Subs_Bit[i])
i--;
if(((OnHook_Spos+1)==OnHook_Rpos)||((OnHook_Spos==ONHOOK_QUEUE_SIZE)&&(OnHook_Rpos==0)))

printf("OnHook_Queue is Full . Not Insert. \n");

else

OnHook_Queue[OnHook_Spos]=i;
printf("OnHook_Queue: %d,OnHook_Sub:%d \n");

JudgeWord=JudgeWord&(~Subs_Bit[i]);
i--;

NewScan_OnHook=Scn;
OldLm=Lm[0];
UM_OnHook_1=(~NewScan_OnHook)&OldLm;
Lm[0]=Scn;
追问

还是不行、自己太菜、帮忙补改一下、

追答

32位版本的C/C++编译器大多数都没有inportb/outportb函数了,这两个函数在16位的DOS编译系统如TC、MSC中存在,如果使用tc一类的编译环境,应该没有问题;
如果使用32位的编译环境如bcb、vc等,需要自己用汇编定义这两个函数或者使用第三方的函数库。

参考:http://www.cppfans.com/articles/system/portrw_winio.asp

参考技术A 好多好多的问题啊,改了十几处,但是有3处改不了了,缺函数实现:
outportb()
kbhir();
inportb()

具体看注释吧:
#include<stdio.h>
#include<conio.h>
#include<dos.h>
#include<stdlib.h>//这里!这里!这里!这里!这里!这里!
#include<windows.h>//这里!这里!这里!这里!这里!这里!
#define FIRST_BOARD_HOOK_ADDRESS 0x260
#define OFFHOOK_QUEUE_SIZE 16
#define ONHOOK_QUEUE_SIZE 16
#define SUM_BOARD_3
int i;
unsigned char UM_offhook;
unsigned char Lm[1];
unsigned char Subs_Bit[8];
unsigned char OffHook_Queue[OFFHOOK_QUEUE_SIZE];
unsigned char OffHook_Spos,OffHook_Rpos,OffHook_Queue_Flag;
unsigned char OnHook_Queue[ONHOOK_QUEUE_SIZE];
unsigned char OnHook_Spos,OnHook_Rpos,OnHook_Queue_Flag;
unsigned char UM_OffHook_1,UM_OnHook_1;
void ScanFirstBoard(void);
main() //这里!这里!这里!这里!这里!这里!
OffHook_Queue[0]=0;
OffHook_Spos=0;
OffHook_Rpos=0;
OffHook_Queue_Flag=0;
OnHook_Queue[0]=0;
OnHook_Spos=0;
OnHook_Rpos=0;
OnHook_Queue_Flag=0;
Lm[0]=0;
Subs_Bit[0]=0x01;
Subs_Bit[1]=0x02;
Subs_Bit[2]=0x04;
Subs_Bit[3]=0x08;
Subs_Bit[4]=0x10;
Subs_Bit[5]=0x20;
Subs_Bit[6]=0x40;
Subs_Bit[7]=0x80;
UM_OffHook_1=0;
UM_OnHook_1=0;
outportb(0x369,0);//这里!这里!这里!这里!这里!这里!
system("cls");//这里!这里!这里!这里!这里!这里!
printf("Please offhook,check offhooksubscriber number.\n");
printf("Then onhook,checkonhooksubscriber number.\n");
for(;;)

if(kbhir())//这里!这里!这里!这里!这里!这里!
break;//这里!这里!这里!这里!这里!这里!
Sleep(20);//这里!这里!这里!这里!这里!这里!
ScanFirstBoard();

return 0;//这里!这里!这里!这里!这里!这里!

void ScanFirstBoard()//这里!这里!这里!这里!这里!这里!

unsigned char Scn;
unsigned char NewScan_OffHook;
unsigned char NewScan_OnHook;
unsigned char OldLm;
unsigned char CurrentBoardNum;
unsigned int JudgeWord;
int i;
CurrentBoardNum=0x01;
Scn=inportb(FIRST_BOARD_HOOK_ADDRESS)&0xff;//这里!这里!这里!这里!这里!这里!
JudgeWord=UM_OffHook_1 & Scn;
i=7;
while(JudgeWord!=0)

while((JudgeWord&Subs_Bit[i])!=Subs_Bit[i])//这里!这里!这里!这里!这里!这里!
i--;
if(((OffHook_Spos+1)==OffHook_Rpos)||((OffHook_Spos==OFFHOOK_QUEUE_SIZE)&&(OffHook_Spos==0)))

printf("OffHook_Queue is Full. Not Insert. \ n");//这里!这里!这里!这里!这里!这里!

else//这里!这里!这里!这里!这里!这里!

OffHook_Queue[OffHook_Spos]=i;
printf("OffHook_Queue: BoardNum:%d,OffHook_Sub:%d\n",CurrentBoardNum,i+1);

JudgeWord=JudgeWord&(~Subs_Bit[i]);
i--;

printf("OffHook_Queue : %x\n",OffHook_Queue[OffHook_Spos]);
NewScan_OffHook=Scn;
OldLm=Lm[0];
UM_OffHook_1=NewScan_OffHook&(~OldLm);
NewScan_OnHook=Scn;
JudgeWord=UM_OnHook_1 &(~NewScan_OnHook);//这里!这里!这里!这里!这里!这里!
i=7;
while(JudgeWord !=0)//这里!这里!这里!这里!这里!这里!

while((JudgeWord&Subs_Bit[i])!=Subs_Bit[i])//这里!这里!这里!这里!这里!这里!
i--;
if(((OnHook_Spos+1)==OnHook_Rpos)||((OnHook_Spos==ONHOOK_QUEUE_SIZE)&&(OnHook_Rpos==0)))

printf("OnHook_Queue is Full . Not Insert. \n");//这里!这里!这里!这里!这里!这里!

else

OnHook_Queue[OnHook_Spos]=i;
printf("OnHook_Queue: %d,OnHook_Sub:%d \n");

JudgeWord=JudgeWord&(~Subs_Bit[i]);
i--;

NewScan_OnHook=Scn;
OldLm=Lm[0];
UM_OnHook_1=(~NewScan_OnHook)&OldLm;//这里!这里!这里!这里!这里!这里!
Lm[0]=Scn;
追问

大虾、我照你的改了、发现确实许多错误、求求大虾再试着改改!很急的、谢谢大虾!谢谢大虾!

追答

你按照我的修改,应该就剩3个Error了,这个主要是缺少库函数导致,你用TC试一试,应该能行

追问

二、课程设计的主要内容
设计题目:局内正常通话的呼叫处理程序设计
设计内容:
(1)分析模拟用户线信令处理程序的执行过程。
(2)分析呼叫控制进程在局内正常呼叫时的SDL图。
(3)使用C语言设计实现用户线扫描程序.
那大虾有关于这方面的C语言程序吗?我是学通信的,关于现代交换原理这门课的课程设计、

参考技术B 在008.cpp的行2146,OffHook_Queue之前少了一个分号; 参考技术C main() 后面少个追问

还是不对啊

参考技术D main后面没括号

linux错误提示为啥显示菱形???求高手详解,有些英文显示不出来,显示出来是菱形,

你好楼主,你这问题很常见。你关心菱形乱码,是不是因为你经常在使用文本界面呢?
如果你想显示中文的话,可以尝试安装fbterm + openvanilla。
网上有教程。安装好后,输入fbterm就可以显示中文了,还带有输入法。

如果你觉得没必要在终端显示汉字,但某一时刻又不想有乱码,怎么办?

可以切换显示语言。
这在安装软件的时候,查看输出信息比较有用,因为用ctrl+alt+F1打开的终端,
默认不显示中文。

要查看当前的语言字符编码,可以使用命令locale,但简单的方式是
echo $LANG
如果你需要终端临时切换到英语显示的话,试试下面的命令
save_LANG=$LANG #保存LANG变量
export LANG=en_US.UTF8 #设置新变量
要切换回来的话,把刚才保存的值,赋值给LANG变量
export LANG=$save_LANG

#如果不是使用UTF8,可以参照echo $LANG的输出,将UTF8替换为相应值
如en_US.GB2312
参考技术A 菱形的地方不是英文,是中文。这是linux终端无法显示中文是的现象。
如果你英文好的话,可以把系统改为英文版。
还是想看中文的话,就需要安装中文字体和支持中文显示的终端,例如zhcon,fbterm.

以上是关于求C语言高手解决,程序有一处错误始终找不出来。下面是程序代码。回答好了追加100分啊!在线等、很急!的主要内容,如果未能解决你的问题,请参考以下文章

C++类的定义 简单的程序 求改错

C语言中函数被多次调用,如何正确得将每次求的的值复制出来,求高手。

linux错误提示为啥显示菱形???求高手详解,有些英文显示不出来,显示出来是菱形,

如何解决gcc编译c程序找不到头文件的问题

1到20的阶乘之和用C程序有点问题~哪为高手解决下

MFC读取excel文件程序,在release模式下正常读取,但在debug模式编译没问题,运行就关闭,求高手!