求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)
下面的程序可以编译,但是连接时出现库函数没有说明的问题,请添加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
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语言程序吗?我是学通信的,关于现代交换原理这门课的课程设计、
还是不对啊
参考技术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语言中函数被多次调用,如何正确得将每次求的的值复制出来,求高手。