社区
C++ 语言
帖子详情
tc++中当我去掉类型转换时,为何报int*不能赋给time*指针的error呢
Robincen
2003-10-21 10:52:08
tc++中:(已有相关头文件)
1 struct time tm,*tr;
2 tr=(struct time*) new time;
为什么第二句就是编译不过呢?并提示缺少 ;
而且当我去掉2中的类型转换时,也报int*不能赋给time*指针,但按tc++语法的话,应该是不报错的啊!!
请指教:
...全文
41
7
打赏
收藏
tc++中当我去掉类型转换时,为何报int*不能赋给time*指针的error呢
tc++中:(已有相关头文件) 1 struct time tm,*tr; 2 tr=(struct time*) new time; 为什么第二句就是编译不过呢?并提示缺少 ; 而且当我去掉2中的类型转换时,也报int*不能赋给time*指针,但按tc++语法的话,应该是不报错的啊!! 请指教:
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
xiaoyunet
2003-10-21
打赏
举报
回复
你的语法是正确的,加不加转型都是对的,相信自己,问题不在这里。
Robincen
2003-10-21
打赏
举报
回复
但我写成 new struct time的时候,它反而提示time 没定义!
无语了~~
tc++中,必须写成struct "name"吗 ?
daizh
2003-10-21
打赏
举报
回复
应该是new struct time;
Spacesoft
2003-10-21
打赏
举报
回复
tr=(struct time*) new time;
用得着这么写吗?直接写tr=(time*) new time;不就可以了?而且个人认为(time*) 这个转换完全没有必要。假如不加这个转换要报错的话,那应该是编译器的问题。
Wolf0403
2003-10-21
打赏
举报
回复
晕啊,果然是 TC
Robincen
2003-10-21
打赏
举报
回复
请求帮助~~~~
Robincen
2003-10-21
打赏
举报
回复
#include<dos.h>
#include<stdlib.h>
main(){
struct time *tr;
tr=new time ;
}
为何加了stdlib.h 就编译不过了?
基于DOS的多任务系统的实现
基于DOS的多任务系统的实现 #include
#include
#include <
time
.h> #include
/*定义TCB状态*/ #define FINISHED 0 #define RUNNING 1 #define READY 2 #define BLOCKED 3 #define NTCB 5 /*定义最大空闲TCB个数*/ #define TC 2 /*定义
时
间片长度*/ #define NBUF 6 /*定义缓冲区大小*/ #define GET_INDOS 0x34 #define GET_CRIT_ERR 0x5d06 struct TCB{ unsigned char *stack; /*线程堆栈起始地址*/ unsigned ss; /*堆栈段址*/ unsigned sp; /*堆栈
指针
*/ char state; /*线程状态*/ char name[15]; /*线程外部标识符*/ struct TCB *next; }tcb[NTCB]; /*初始化堆栈
时
使用*/ struct
int
_regs{ unsigned bp, di, si, ds, es, dx, cx, bx, ax, ip, cs, flags, off, seg; }; char fpub[3];
int
current= -1; /*定义一个当前TCB下标的全局变量*/
int
time
count = 0; /*定义
时
间片*/ char far *indos_ptr = 0; /*该
指针
变量存放INDOS表示的地址*/ char far *crit_err_ptr = 0; /*该
指针
变量存放严重错误标志的地址*/ void
int
errupt (*old_
int
8)(void);/*旧的
时
钟中断处理程序*/ typedef
int
(far *codeptr)(void); /*定义了一个函数
指针
类型*/
int
buffer[NBUF] = {-1,-1,-1,-1,-1,-1}; /*生产者消费者中的缓冲区*/
int
in = 0;
int
out = 0; typedef struct{
int
value; struct TCB *wq; }semaphore; semaphore mutex={1,NULL},empty={NBUF,NULL},full={0,NULL},Mutex2={1,NULL}; /*生产者消费者中的信号量*/ void InitDos(void) { union REGS regs; struct SREGS segregs; regs.h.ah = GET_INDOS;
int
dosx(®s,®s,&segregs); indos_ptr = MK_FP(segregs.es,regs.x.bx); if(_osmajor<3) crit_err_ptr = indos_ptr+1; else if(_osmajor==3 && _osminor==0) crit_err_ptr = indos_ptr-1; else{ regs.x.ax = GET_CRIT_ERR;
int
dosx(®s,®s,&segregs); crit_err_ptr = MK_FP(segregs.ds,regs.x.si); } }
int
DosBusy(void) { if(indos_ptr && crit_err_ptr) return (*indos_ptr || *crit_err_ptr); else return -1; }
int
finished(void) {
int
i; for(i=1; i
int Seeknext() {
int
i,ks; i=current+1; ks=0; disable(); while(ks
intf("Seeknext tcb is
error
!!\n"); enable(); } void
int
errupt my_swtch(void) { disable();/*开中断*/ /*保护正在执行的线程current的现场,暂停它的执行*/ tcb[current].ss=_SS; tcb[current].sp=_SP; if(tcb[current].state==RUNNING) tcb[current].state=READY; /*找到新的就绪线程i*/ current=Seeknext(); tcb[current].state=RUNNING; /*切换堆栈,恢复线程i的现场,把CPU分派给它*/ _SS=tcb[current].ss; _SP=tcb[current].sp; /*重新开始计
时
*/
time
count=0; enable();/*关中断*/ } void
int
errupt new_
int
8(void) { /*调用原来的
时
钟中断服务程序*/ (*old_
int
8)(); /*进行计
时
*/
time
count++; /*当前线程的
时
间片到否*/ if(
time
count >= TC) if(!DosBusy()) { /*调用my_swtch进行重新调度*/ my_swtch(); } } void Destroy(
int
i) { if(tcb[i].state==RUNNING) { disable(); tcb[i].state=FINISHED; free(tcb[i].stack); enable(); } return; } void over(void) { Destroy(current); pr
int
f("%s is finished!\n", tcb[current].name); my_swtch(); } void tcb_state() {
int
i; pr
int
f("These are the information of all threads: \n"); for(i=0;i
intf("the key word of the thread is : %d\n the name of thread is : %s\n the state of the thread is ",i,tcb[i].name); switch(tcb[i].state) { case (1): pr
int
f("Running \n");break; case (2): pr
int
f("Ready \n");break; case (3): pr
int
f("Blocked\n");break; case (0): pr
int
f("Finished\n");break; } } } /*创建线程*/
int
create(char *name, codeptr code,
int
stacklen) {
int
i = 0; struct
int
_regs *temp; while(tcb[i].state != FINISHED) /*查找空闲TCB块*/ i++; if(i == NTCB) return -1; /*没有空闲TCB块可用*/ strcpy(tcb[i].name, name); tcb[i].state = READY; tcb[i].stack = (unsigned char*)malloc(stacklen); /*为新线程分配私有堆栈空间*/ tcb[i].stack = tcb[i].stack + stacklen; /*初始化新线程的私有堆栈*/ temp = (struct
int
_regs *)tcb[i].stack-1; temp->ds = _DS; temp->es = _ES; temp->flags = 0x200; temp->ip = FP_OFF(code); temp->cs = FP_SEG(code); temp->off = FP_OFF(over); /*将over函数压入堆栈,线程结束自动执行*/ temp->seg = FP_SEG(over); tcb[i].ss = FP_SEG(temp); tcb[i].sp = FP_OFF(temp); return i; } void block(semaphore *sem) { struct TCB *p; disable(); tcb[current].state = BLOCKED; p = sem->wq; if(p == NULL){ sem->wq = &tcb[current]; } else{ while(p->next != NULL) p = p->next ; p->next = &tcb[current]; } tcb[current].next = NULL; my_swtch(); enable(); } void wakeup(semaphore *sem) { struct TCB *p; disable(); p = sem->wq; if(p != NULL){ p->state = READY; sem->wq = sem->wq->next; } enable(); } void wait(semaphore *sem) { disable(); sem->value = sem->value - 1; if(sem->value < 0) { pr
int
f("\nthe thread of %s is blocked\n",tcb[current].name); block(sem); } enable(); } void signal(semaphore *sem) { disable(); sem->value = sem->value + 1; if(sem->value <= 0) wakeup(sem); enable(); } void proceducer() {
int
i, j, k; for(i = 1; i <=13;i++){ wait(&empty); wait(&mutex); buffer[in] = i*i; pr
int
f("%s puts a number of %d in the buffer \n",tcb[current].name, buffer[in]); /*for(j=0; j<10000; j++) for(k=0; k<10000; k++);*/ in = (in +1) % NBUF; signal(&mutex); signal(&full); } } void consumer() {
int
i, j, k; for(i = 1; i<=7;i++){ wait(&full); wait(&mutex); pr
int
f("consumer gets the number of %d from the buffer\n", buffer[out]); buffer[out] = -1; /*for(j=0; j<1000; j++) for(k=0; k<10000; k++);*/ out = (out+1) % NBUF; signal(&mutex); signal(&empty); } } void f1() {
int
i,j,k; wait(&Mutex2); strcpy(fpub,"f1"); signal(&Mutex2); for(i=1;i<=22;i++) { wait(&Mutex2); pr
int
f("%s is running !\n",fpub); signal(&Mutex2); for(j=0;j<10000;j++) for(k=0;k<10000;k++); } } void f2() {
int
i,j,k; wait(&Mutex2); /*做放入数的操作*/ strcpy(fpub,"f2"); signal(&Mutex2); for(i=1;i<=33;i++) { wait(&Mutex2); pr
int
f("%s is running !\n",fpub); signal(&Mutex2); for(j=0;j<10000;j++) for(k=0;k<10000;k++); } } void InitTcb()/*TCB的初始化*/ {
int
i; for(i=0;i
int main(void) { InitDos(); InitTcb(); old_
int
8 = getvect(8); strcpy(tcb[0].name, "main"); tcb[0].state = RUNNING; current = 0 ; create("proceducerOne", (codeptr)proceducer, 1024); create("consumer", (codeptr)consumer, 1024); /*create("proceducerTwo", (codeptr)proceducer, 1024); create("f1",(codeptr)f1,1024); create("f2",(codeptr)f2,1024);*/ tcb_state(NTCB); setvect(8, new_
int
8); my_swtch(); while(!finished()) ; strcpy(tcb[0].name, "\0"); tcb[0].state = FINISHED; setvect(8, old_
int
8); pr
int
f("\n"); tcb_state(NTCB); pr
int
f("\nMulti_task system terminated.\n"); getchar(); return 0; }
电话薄管理系统C语言
win-tc下的,修改下可以在vc下运行,是c语言编写的 #include "stdio.h" /*标准输入输出函数库*/ #include "stdlib.h" /*标准函数库*/ #include "string.h" /*字符串函数库*/ #include "conio.h" /*屏幕操作函数库*/ #define HEADER1 " ---------------------------TELEPHONE BOOK---------------------------\n" #define HEADER2 " | num | name | phonenumber | address | \n" #define HEADER3 " |--------------|------------|-----------------|---------------------| \n" #define FORMAT " | %-10s| %-10s| %-15s |%-20s | \n" #define DATA p->num,p->name,p->phonenum,p->address #define END " ---------------------------------------------------------------------\n" #define N 100
int
saveflag=0; /*是否需要存盘的标志变量*/ /*定义与电话簿有关的数据结构*/ typedef struct telebook /*标记为telebook*/ { char num[4]; /*编号*/ char name[10]; /*姓名*/ char phonenum[15]; /*电话号码*/ char address[20]; /*地址*/ }TELEBOOK; void menu() /*主菜单*/ { system("cls"); /*调用DOS命令,清屏.与clrscr()功能相同*/ textcolor(13); /*在文本模式中选择新的字符颜色*/ gotoxy(10,5); /*在文本窗口中设置光标*/ cpr
int
f(" The telephone-book Management System \n"); gotoxy(10,8); cpr
int
f(" *************************Menu********************************\n"); gotoxy(10,9); cpr
int
f(" * 1 input record 2 display record *\n"); gotoxy(10,10); cpr
int
f(" * 3 delete record 4 search record *\n"); gotoxy(10,11); cpr
int
f(" * 5 modify record 6 insert record *\n"); gotoxy(10,12); cpr
int
f(" * 7 sort record 8 save record *\n"); gotoxy(10,13); cpr
int
f(" * 0 quit system *\n"); gotoxy(10,14); cpr
int
f(" *************************************************************\n"); /*cpr
int
f()送格式化输出至文本窗口屏幕中*/ } /*格式化输出表头*/ void pr
int
header() { pr
int
f(HEADER1); pr
int
f(HEADER2); pr
int
f(HEADER3); } /*格式化输出表中数据*/ void pr
int
data(TELEBOOK pp) { TELEBOOK* p; p=&pp; pr
int
f(FORMAT,DATA); } /*显示数组temp[]中存储的电话簿记录,内容为telebook结构中定义的内容*/ void Disp(TELEBOOK temp[],
int
n) {
int
i; if(n==0) /*表示没有电话簿记录*/ { pr
int
f("\n=====>Not telephone record!\n"); getchar(); return; } pr
int
f("\n\n"); pr
int
header(); /*输出表格头部*/ i=0; while(i
intdata(temp[i]); i++; pr
int
f(HEADER3); } getchar(); } void Wrong() /*输出按键错误信息*/ { pr
int
f("\n\n\n\n\n***********
Error
:input has wrong! press any key to continue**********\n"); getchar(); } void Nofind() /*输出未查找此记录的信息*/ { pr
int
f("\n=====>Not find this telephone record!\n"); } /************************************************************* 作用:用于定位数组中符合要求的记录,并返回保存该记录的数组元素下标值 参数:findmess[]保存要查找的具体内容; nameorphonenum[]保存按什么在数组中查找; **************************************************************/
int
Locate(TELEBOOK temp[],
int
n,char findmess[],char nameorphonenum[]) {
int
i=0; if(strcmp(nameorphonenum,"phonenum")==0) /*按电话号码查询*/ { while(i
int lens,char *notice) { char n[255]; do{ pr
int
f(notice); /*显示提示信息*/ scanf("%s",n); /*输入字符串*/ if(strlen(n)>lens) pr
int
f("\n exceed the required length! \n"); /*进行长度校验,超过lens值重新输入*/ }while(strlen(n)>lens); strcpy(t,n); /*将输入的字符串拷贝到字符串t中*/ } /*增加电话簿记录*/
int
Add(TELEBOOK temp[],
int
n) { char ch,num[10];
int
i,flag=0; system("cls"); Disp(temp,n); /*先打印出已有的电话簿信息*/ while(1) /*一次可输入多条记录,直至输入编号为0的记录才结束添加操作*/ { while(1) /*输入记录编号,保证该编号没有被使用,若输入编号为0,则退出添加记录操作*/ { stringinput(num,10,"input number(press '0'return menu):"); /*格式化输入编号并检验*/ flag=0; if(strcmp(num,"0")==0) /*输入为0,则退出添加操作,返回主界面*/ {return n;} i=0; while(i
intf("==>The number %s is existing,try again?(y/n):",num); scanf("%c",&ch); if(ch=='y'||ch=='Y') continue; else return n; } else {break;} } strcpy(temp[n].num,num); /*将字符串num拷贝到temp[n].num中*/ stringinput(temp[n].name,15,"Name:"); stringinput(temp[n].phonenum,15,"Telephone:"); stringinput(temp[n].address,15,"Adress:"); saveflag=1; n++; } return n; } /*按编号或姓名,查询电话簿记录*/ void Qur(TELEBOOK temp[],
int
n) {
int
select; /*1:按姓名查,2:按电话号码查,其他:返回主界面(菜单)*/ char searchinput[20]; /*保存用户输入的查询内容*/
int
p=0; if(n<=0) /*若数组为空*/ { system("cls"); pr
int
f("\n=====>No telephone record!\n"); getchar(); return; } system("cls"); pr
int
f("\n =====>1 Search by name =====>2 Search by telephone number\n"); pr
int
f(" please choice[1,2]:"); scanf("%d",&select); if(select==1) /*按姓名查询*/ { stringinput(searchinput,10,"input the existing name:"); p=Locate(temp,n,searchinput,"name"); /*在数组temp中查找编号为searchinput值的元素,并返回该数组元素的下标值*/ if(p!=-1) /*若找到该记录*/ { pr
int
header(); pr
int
data(temp[p]); pr
int
f(END); pr
int
f("press any key to return"); getchar(); } else Nofind(); getchar(); } else if(select==2) /*按电话号码查询*/ { stringinput(searchinput,15,"input the existing telephone number:"); p=Locate(temp,n,searchinput,"phonenum"); if(p!=-1) { pr
int
header(); pr
int
data(temp[p]); pr
int
f(END); pr
int
f("press any key to return"); getchar(); } else Nofind(); getchar(); } else Wrong(); getchar(); } /*删除电话簿记录:先找到保存该记录的数组元素的下标值,然后在数组中删除该数组元素*/
int
Del(TELEBOOK temp[],
int
n) {
int
sel; char findmess[20];
int
p=0,i=0; if(n<=0) { system("cls"); pr
int
f("\n=====>No telephone record!\n"); getchar(); return n; } system("cls"); Disp(temp,n); pr
int
f("\n =====>1 Delete by name =====>2 Delete by telephone number\n"); pr
int
f(" please choice[1,2]:"); scanf("%d",&sel); if(sel==1) { stringinput(findmess,10,"input the existing name:"); p=Locate(temp,n,findmess,"name"); getchar(); if(p!=-1) { for(i=p+1;i
intf("\n==>delete success!\n"); n--; getchar(); saveflag=1; } else Nofind(); getchar(); } else if(sel==2) /*先按电话号码查询到该记录所在的数组元素的下标值*/ { stringinput(findmess,15,"input the existing telephone number:"); p=Locate(temp,n,findmess,"phonenum"); getchar(); if(p!=-1) { for(i=p+1;i
intf("\n=====>delete success!\n"); n--; getchar(); saveflag=1; } else Nofind(); getchar(); } return n; } /*修改电话簿记录。先按输入的联系人姓名查询到该记录, 然后提示用户修改该记录编号之外的值,编号
不能
修改*/ void Modify(TELEBOOK temp[],
int
n) { char findmess[20];
int
p=0; if(n<=0) { system("cls"); pr
int
f("\n=====>No telephone number record!\n"); getchar(); return ; } system("cls"); pr
int
f("modify telephone book recorder"); Disp(temp,n); stringinput(findmess,10,"input the existing name:"); /*输入并检验该姓名*/ p=Locate(temp,n,findmess,"name"); /*查询到该数组元素,并返回下标值*/ if(p!=-1) /*若p!=-1,表明已经找到该数组元素*/ { pr
int
f("Number:%s,\n",temp[p].num); pr
int
f("Name:%s,",temp[p].name); stringinput(temp[p].name,15,"input new name:"); pr
int
f("Name:%s,",temp[p].phonenum); stringinput(temp[p].phonenum,15,"input new telephone:"); pr
int
f("Name:%s,",temp[p].address); stringinput(temp[p].address,30,"input new address:"); pr
int
f("\n=====>modify success!\n"); getchar(); Disp(temp,n); getchar(); saveflag=1; } else {Nofind(); getchar(); } return ; } /*插入记录:按编号查询到要插入的数组元素的位置,然后在该记录编号之后插入一个新数组元素。*/
int
Insert(TELEBOOK temp[],
int
n) { char ch,num[10],s[10]; /*s[]保存插入点位置之前的记录编号,num[]保存输入的新记录的编号*/ TELEBOOK newinfo;
int
flag=0,i=0,kkk=0; system("cls"); Disp(temp,n); while(1) { stringinput(s,10,"please input insert location after the Number:"); flag=0;i=0; while(i
intf("\n=====>The number %s is not existing,try again?(y/n):",s); scanf("%c",&ch); if(ch=='y'||ch=='Y') {continue;} else {return n;} } } /*以下新记录的输入操作与Add()相同*/ while(1) { stringinput(num,10,"input new Number:"); i=0;flag=0; while(i
intf("\n=====>Sorry,The number %s is existing,try again?(y/n):",num); scanf("%c",&ch); if(ch=='y'||ch=='Y') {continue;} else {return n;} } else break; } strcpy(newinfo.num,num); /*将字符串num拷贝到newinfo.num中*/ stringinput(newinfo.name,15,"Name:"); stringinput(newinfo.phonenum,15,"Telephone:"); stringinput(newinfo.address,15,"Adress:"); saveflag=1; /*在main()有对该全局变量的判断,若为1,则进行存盘操作*/ for(i=n-1;i>kkk;i--) /*从最后一个组织元素开始往向移一个元素位置*/ { strcpy(temp[i+1].num,temp[i].num); strcpy(temp[i+1].name,temp[i].name); strcpy(temp[i+1].phonenum,temp[i].phonenum); strcpy(temp[i+1].address,temp[i].address); } strcpy(temp[kkk+1].num,newinfo.num); /*在kkk的元素位置后插入新记录*/ strcpy(temp[kkk+1].name,newinfo.name); strcpy(temp[kkk+1].phonenum,newinfo.phonenum); strcpy(temp[kkk+1].address,newinfo.address); n++; Disp(temp,n); pr
int
f("\n\n"); getchar(); return n; } /*利用选择排序法实现数组的按记录编号或姓名的升序排序*/ void SelectSort(TELEBOOK temp[],
int
n) {
int
i=0,j=0,flag=0,indexmin,select; char charflag[10]; TELEBOOK newinfo; if(n<=0) { system("cls"); pr
int
f("\n=====>Not telephone record!\n"); getchar(); return ; } system("cls"); Disp(temp,n); /*显示排序前的所有记录*/ pr
int
f(" ==>1 SORT BY NUMBER ==>2 SORT BY NAME\n"); pr
int
f(" please choice[1,2]:"); scanf("%d",&select); if(select==1) /*按记录编号排序*/ { for(i=0;i
intf("\n =====>sort complete!\n"); getchar(); return; } else if(select==2) { for(i=0;i
0) { charflag[0]=temp[j].name; indexmin=j; } } strcpy(newinfo.num,temp[i].num); /*利用结构变量newinfo实现数组元素的交换*/ strcpy(newinfo.name,temp[i].name); strcpy(newinfo.phonenum,temp[i].phonenum); strcpy(newinfo.address,temp[i].address); strcpy(temp[i].num,temp[indexmin].num); strcpy(temp[i].name,temp[indexmin].name); strcpy(temp[i].phonenum,temp[indexmin].phonenum); strcpy(temp[i].address,temp[indexmin].address); strcpy(temp[indexmin].num,newinfo.num); strcpy(temp[indexmin].name,newinfo.name); strcpy(temp[indexmin].phonenum,newinfo.phonenum); strcpy(temp[indexmin].address,newinfo.address); } Disp(temp,n); /*显示排序后的所有记录*/ saveflag=1; pr
int
f("\n =====>sort complete!\n"); getchar(); return; } else {Wrong(); getchar(); getchar(); return;} } /*数据存盘,若用户没有专门进行此操作且对数据有修改,在退出系统
时
, 会提示用户存盘*/ void Save(TELEBOOK temp[],
int
n) { FILE* fp;
int
i=0; fp=fopen("c:\\telephon","w");/*以只写方式打开文本文件*/ if(fp==NULL) /*打开文件失败*/ { pr
int
f("\n=====>open file
error
!\n"); getchar(); return ; } for(i=0;i
0) { getchar(); pr
int
f("\n\n=====>save file complete,total saved's record number is:%d\n",i); getchar(); saveflag=0; } else {system("cls"); pr
int
f("the current link is empty,no telephone record is saved!\n"); getchar(); } fclose(fp); /*关闭此文件*/ } void main() { TELEBOOK tele[N]; /*定义TELEBOOK结构体*/ FILE *fp; /*文件
指针
*/
int
select; /*保存选择结果变量*/ char ch; /*保存(y,Y,n,N)*/
int
count=0; /*保存文件中的记录条数(或元素个数)*/ fp=fopen("C:\\telephon","a+"); /*以追加方式打开文本文件c:\telephon,可读可写,若此文件不存在,会创建此文件*/ if(fp==NULL) { pr
int
f("\n=====>can not open file!\n"); exit(0); } while(!feof(fp)) { if(fread(&tele[count],sizeof(TELEBOOK),1,fp)==1) /*一次从文件中读取一条电话簿记录*/ count++; } fclose(fp); /*关闭文件*/ pr
int
f("\n==>open file sucess,the total records number is : %d.\n",count); getchar(); menu(); while(1) { system("cls"); menu(); pr
int
f("\n Please Enter your choice(0~8):"); /*显示提示信息*/ scanf("%d",&select); if(select==0) { if(saveflag==1) /*若对数组的数据有修改且未进行存盘操作,则此标志为1*/ { getchar(); pr
int
f("\n==>Whether save the modified record to file?(y/n):"); scanf("%c",&ch); if(ch=='y'||ch=='Y') Save(tele,count); } pr
int
f("\n===>thank you for useness!"); getchar(); break; } switch(select) { case 1:count=Add(tele,count);break; /*增加电话簿记录*/ case 2:system("cls");Disp(tele,count);break; /*显示电话簿记录*/ case 3:count=Del(tele,count);break; /*删除电话簿记录*/ case 4:Qur(tele,count);break; /*查询电话簿记录*/ case 5:Modify(tele,count);break; /*修改电话簿记录*/ case 6:count=Insert(tele,count);break; /*插入电话簿记录*/ case 7:SelectSort(tele,count);break; /*排序电话簿记录*/ case 8:Save(tele,count);break; /*保存电话簿记录*/ default: Wrong();getchar();break; /*按键有误,必须为数值0-9*/ } } }
华为编程开发规范与案例
软件编程规范培训实例与练习 软件编程规范培训实例与练习 问题分类 1 逻辑类问题(A类)-指设计、编码中出现的计算正确性和一致性、程序逻辑控制等方面出现的问题,在系统中起关键作用,将导致软件死机、功能正常实现等严重问题; 接口类问题(B类)-指设计、编码中出现的函数和环境、其他函数、全局/局部变量或数据变量之间的数据/控制传输不匹配的问题,在系统中起重要作用,将导致模块间配合失效等严重问题; 维护类问题(C类)-指设计、编码中出现的对软件系统的维护方便程度造成影响的问题,在系统中不起关键作用,但对系统后期维护造成不便或导致维护费用上升; 可测试性问题(D类)-指设计、编码中因考虑不周而导致后期系统可测试性差的问题。 处罚办法 问题发生率: P=D/S D=DA+0.5DB+0.25DC 其中: P -问题发生率 D -1个季度内错误总数 DA -1个季度内A类错误总数 DB -1个季度内B类错误总数 DC -1个季度内C类错误总数 S -1个季度内收到问题
报
告单总数 1)当D≥3
时
,如果P≥3%,将进行警告处理,并予以公告; 2)当D≥5
时
,如果P≥5%,将进行罚款处理,并予以公告。 目 录 一、逻辑类代码问题 第5页 1、变量/
指针
在使用前就必须初始化 第5页 【案例1.1.1】 第5页 2、防止
指针
/数组操作越界 第5页 【案例1.2.1】 第5页 【案例1.2.2】 第6页 【案例1.2.3】 第7页 【案例1.2.4】 第8页 3、避免
指针
的非法引用 第9页 【案例1.3.1】 第9页 4、变量类型定义错误 第10页 【案例1.4.1】 第10页 5、正确使用逻辑与&&、屏蔽&操作符 第17页 【案例1.5.1】 第17页 6、注意数据类型的匹配 第18页 【案例1.6.1】 第18页 【案例1.6.2】 第18页 7、用于控制条件转移的表达式及取值范围是否书写正确 第20页 【案例1.7.1】 第20页 【案例1.7.2】 第21页 【案例1.7.3】 第22页 8、条件分支处理是否有遗漏 第24页 【案例1.8.1】 第24页 9、引用已释放的资源 第26页 【案例1.9.1】 第26页 10、分配资源是否已正确释放 第28页 【案例1.10.1】 第28页 【案例1.10.2】 第29页 【案例1.10.3】 第30页 【案例1.10.4】 第32页 【案例1.10.5】 第33页 【案例1.10.6】 第35页 【案例1.10.7】 第38页 11、防止资源的重复释放 第39页 【案例1.11.1】 第39页 12、公共资源的互斥性和竞用性 第40页 【案例1.12.1】 第40页 【案例1.12.2】 第40页 二、接口类代码问题 第43页 1、对函数参数进行有效性检查 第43页 【案例2.1.1】 第43页 【案例2.1.2】 第43页 【案例2.1.3】 第44页 【案例2.1.4】 第46页 【案例2.1.5】 第47页 【案例2.1.6】 第48页 2、注意多出口函数的处理 第49页 【案例2.2.1】 第49页 三、维护类代码问题 第51页 1、 统一枚举类型的使用 第51页 【案例3.1.1】 第51页 2、 注释量至少占代码总量的20% 第51页 【案例3.2.1】对XXX产品BAM某版本部分代码注释量的统计 第51页 四、产品兼容性问题 第52页 1、系统配置、命令方式 第52页 【案例4.1.1】 第52页 【案例4.1.2】 第53页 2、设备对接 第54页 【案例4.2.1】 第54页 3、其他 第55页 【案例4.3.1】 第55页 五、版本控制问题 第58页 1、新老代码中同一全局变量不一致 第58页 【案例5.1.1】 第58页 六、可测试性代码问题 第59页 1、调试信息/打印信息的正确性 第59页 【案例6.1.1】 第59页 一、逻辑类代码问题 1、变量/
指针
在使用前就必须初始化 【案例1.1.1】 C语言中最大的特色就是
指针
。
指针
的使用具有很强的技巧性和灵活性,但同
时
也带来了很大的危险性。在XXX的代码中有如下一端对
指针
的灵活使用: ... ... _UC *puc_card_config_tab; ... ... Get_Config_Table(
c++
中try catch的用法小结
在
c++
中,可以直接抛出异常之后自己进行捕捉处理,如:(这样就可以在任何自己得到不想要的结果的
时
候进行中断,比如在进行数据库事务操作的
时
候,如果某一个语句返回SQL_
ERROR
则直接抛出异常,在catch块中进行事务回滚(回滚怎么理解?))。 #include
#include
using namespace std;
int
main () { try { throw 1; throw
error
; } catch(char *str) { cout << str << endl; } catch(
int
i)
c语言char强制转换为
int
_C语言入门这一篇就够了
c语言入门C语言一经出现就以其功能丰富、表达能力强、灵活方便、应用面广等特点迅速在全世界普及和推广。C语言不但执行效率高而且可移植性好,可以用来开发应用软件、驱动、操作系统等。C语言也是其它众多高级语言的鼻祖语言,所以说学习C语言是进入编程世界的必修课。hello,world#include<stdio.h>
int
main() { /*在双引号中间输入Hello Worl...
C++ 语言
64,637
社区成员
250,559
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章