C我的问题一定给分了

时间:2022-05-13 08:58:34
近来了编了一个汉字录入糸统,
   主要有三部分也就是三个函
1:基本的图形处理包括个人的资料的输入,比喻姓名,班级了,时间;
2:汉字的处理包括判断汉字是否正确了
3:基本的图形处理包括输出那些个人资料;
  把这三部分放到一个main函数中,是正确的;
    但是我想用三个函数来实现,应该怎么做呀?
     特别是第二个函数有多个要返回的值,不知道怎么
去处理这些了,希望高手提点思路了

17 个解决方案

#1


把要返回的值放在一个STRUCT中.

#2


汉字录入糸统?C做的?是不是从键盘录入?
能不能把原码发给我?谢谢
yzb1000@163.com

#3


我也想要。可以发给我吗?谢谢。fjndxq@21cn.com

#4


好的呀
   不过你们要帮我把这个问题高定呀?

#5


哇,大家一起来想想啊,有意思啊,这个题目~~~~~~~~~

#6


我的程序在这里呀?
#include <conio.h>
#include <stdio.h>
#include <graphics.h>
#include <time.h>
main()
{ int count,i,j,gd,gm,t,k,w,m,h,h1,p,x1,y1,x2,y2,x3,y3,f;
  float v,tt;
  time_t t1,t2;
  char name[20],cc;
  char x[7],xm[9],bh[60];
  FILE  * fp;
unsigned char ch[2],buf[544];
 gd=DETECT;gm=0;
 initgraph(&gd,&gm," ");directvideo=0;
 textbackground(BLUE);textcolor(YELLOW);
 do{ clrscr();
   gotoxy(26,4);cprintf("****************\n");
   gotoxy(26,5);cprintf("*汉字入通用测试系统*\n");
   gotoxy(26,6);cprintf("*娄底经贸学校*\n");
   gotoxy(26,7);cprintf("*微机教研室*\n");
   gotoxy(26,8);cprintf("李必岩 *\n");
   gotoxy(26,9);cprintf("1999.10\n");
   gotoxy(26,10);cprintf("*********\n");
   cprintf("\n\n");
   gotoxy(8,2);
   cprintf("班级:");
   scanf("%s",&x);
   gotoxy(22,2);
   cprintf("姓名:");
   scanf("%s",&xm);
   gotoxy(12,12);
   cprintf("请输入测试时间<分钟>:");
   scanf("%d",&t);
   gotoxy(12,14);
   cprintf("[k1.txt][k2.txt][k3.txt][k4.txt][k5.txt]");
   gotoxy(12,16);cprintf("请输入标准本件名:");
   scanf("%s",&name);
   fp=fopen(name,"rt");
   if(!fp){cprintf("没有被 打开!!!\n");exit(1);}
   cprintf("\n\n");gotoxy(12,18);
   cprintf("设置录入方法,按任开始!!!!");
   getch();clrscr();
   textbackground(GREEN);textcolor(YELLOW);
   count=0;t1=time(NULL);
   window(8,3,67,22);
   while(! feof(fp)){
   h=2;h1=2;
   fread(buf,549,1,fp);clrscr();
   gotoxy(1,1);cprintf("%s\n",buf);
   gotoxy(1,h);
   j=strlen(buf);
   p=0;i=0;ch[0]='\0' ;
   while(i<j-1){
   CZ:
   if(i==60*(h1-1)+p) {p=p+1;i=i+1;h1=h1+1;h=h+2;gotoxy(1,h);}
   t2=time(NULL);tt=difftime(t2,t1)/60;
   if(tt>=0.1){v=count/tt;
   x1=wherex();y1=wherey();
   gotoxy(6,20);textbackground(RED);
   cprintf("时间:%7.2f分钟   录入速度:%7.2字/分钟",tt,v);
   textbackground(GREEN);gotoxy(x1,y1);}
   if(tt>=t) goto quit;
   ch[0]=getch();
   /*处理光标左*/
   if(ch[0]==75&&wherex()>2)
   {i=i-2;gotoxy(wherex()-2,wherey());}
   /*处理光标右*/
   if(ch[0]==77)
     {gotoxy(wherex()+2,wherey());i=i+2;}
     /*处理光标上移*/
     if(ch[0]==72&&wherey()>2)
     {gotoxy(wherex(),wherey()-2);i=i-61;p=p-1;h1=h1-1;h=h-2;}
     /*处理光标下移*/
     if(ch[0]==80)
     {gotoxy(wherex(),wherey()+2);i=i+61;p=p+1;h1=h1+1;h=h+2;}
     if(ch[0]==32) {cprintf("  ");i=i+1;}
     if(ch[0]==27) goto quit;
     /*断所录入的汉 是否正*/
     if(ch[0]>160) {
     ch[1]=getch();ch[2]='\0';
     bh[i-60*(h1-2)-p]=ch[0];bh[i-60*(h1-2)-p+1]=ch[1];

     if(ch[0]==buf[i]&&ch[1]==buf[i+1]||buf[i]==0&&ch[1]==buf[i+1])
     {++count;x2=wherex();y2=wherey();cprintf("%s",ch);i=i+2;
     textbackground(5);
     gotoxy(x2,y2-1);cprintf("%s",ch);
     gotoxy(wherex(),wherey()+1);textbackground(GREEN);
     if(i==(60*(h1-1)+p)) goto CZ;}
     else {cprintf("%s",ch);i=i+2;} ch[0]='\0';}
     /*处理格*/
     if(ch[0]==8&&wherex()>2)
 {i=i-2;x3=wherex();y3=wherey();
 gotoxy(wherex()-2,wherey());
 cprintf(" "); gotoxy(wherex(),wherey()-1);
 textbackground(GREEN);cprintf("%c%c",buf[i],buf[i+1]);
 gotoxy(wherex(),wherey()+1);
 if(bh[i-60*(h1-2)-p]==buf[i]&&bh[i-60*(h1-2)-p+1]==buf[i+1])
   count=count-1;}
   }
   }
   quit:
   sound(1000);delay(500) ;nosound();
   sound(800) ;delay(500) ;nosound();
   fclose(fp);
   v=count/tt;
   window(1,1,80,25);
   textbackground(BLUE);textcolor(YELLOW);
   clrscr();
   gotoxy(25,4);cprintf("班级:%s",x);
   gotoxy(25,6);cprintf("姓名:%s",xm);
   gotoxy(25,8);cprintf("录入时间长度:%7.2f分钟",tt);
   gotoxy(25,10);cprintf("平均录入速度:%7.2f分钟",v);
   gotoxy(25,12);cprintf("录入的正确为:%4d",count);
   gotoxy(25,16);cprintf("按ESC继....");
   while(getch()!=27);
   gotoxy(15,18);cprintf("从来(Y/N)");
   cc=getch();
   }while(cc=='Y'||cc=='y');
   directvideo=1;closegraph();exit(0);
   }



希望大家能帮我一下用组模的形式写一下了
  一定给分

#7


有些地放有些笔误,我以通个调式了
      希望高用帮我一下了

#8


主要有三部分也就是三个函
1:基本的图形处理包括个人的资料的输入,比喻姓名,班级了,时间;
2:汉字的处理包括判断汉字是否正确了
3:基本的图形处理包括输出那些个人资料;
  把这三部分放到一个main函数中,是正确的;
    但是我想用三个函数来实现,应该怎么做呀?
     特别是第二个函数有多个要返回的值,不知道怎么
去处理这些了,希望高手提点思路了

#9


递二个问题为什么要多个返回值?如果非要不可,可以考虑返回指针

#10


比喻在第二个函数中要返回
   录入时间长度
   平均录入速度
   录入的正确为
   我用指针做不好呀
   请高手帮忙呀???

#11


如果都是数值的话,可以考虑返回一个数组的首地址

#12


你够强,这也能写出来

#13


兄弟你的程序是不是要中文操作系统的支持?

#14


我越看越佩服你了。写了这么长的程序。我从来不能写这么长的程序。呵呵。

我觉得你把个人资料定义为一个结构有利于程序的清晰。

第2个函数 你也可以定义一个结构。然后返回结构的地址。

我是这样想的。不知道你认为是怎么样的。我想这样应该可以吧。

#15


chengdulang(成都狼)
谢谢你了给我的思路呀!!


#16


那位高手给能不能给我做一下呀??

#17


你可以考虑定义一个数据结构,比如类,或者结构,该类包含你要返回的信息的项目。

class Info
{
  public:
  Info();
  float time_length; //存放录入时间长度
  int wpm;//存放速度
  float rate; //存放正确率
  //还可以添加别的你想要统计的信息
}; 

用法:

Info * fun2(..)
{
  Info * myinfo = new Info();
  Info->wpm = 200;
  Info->rate = 0.98;
  ...
  return myinfo;  
 }

//这里类写得很草率,事实上你可以封装这些数据成员,用成员函数来存取他们的值。
当然也可以用结构来实现,是一样的。

#1


把要返回的值放在一个STRUCT中.

#2


汉字录入糸统?C做的?是不是从键盘录入?
能不能把原码发给我?谢谢
yzb1000@163.com

#3


我也想要。可以发给我吗?谢谢。fjndxq@21cn.com

#4


好的呀
   不过你们要帮我把这个问题高定呀?

#5


哇,大家一起来想想啊,有意思啊,这个题目~~~~~~~~~

#6


我的程序在这里呀?
#include <conio.h>
#include <stdio.h>
#include <graphics.h>
#include <time.h>
main()
{ int count,i,j,gd,gm,t,k,w,m,h,h1,p,x1,y1,x2,y2,x3,y3,f;
  float v,tt;
  time_t t1,t2;
  char name[20],cc;
  char x[7],xm[9],bh[60];
  FILE  * fp;
unsigned char ch[2],buf[544];
 gd=DETECT;gm=0;
 initgraph(&gd,&gm," ");directvideo=0;
 textbackground(BLUE);textcolor(YELLOW);
 do{ clrscr();
   gotoxy(26,4);cprintf("****************\n");
   gotoxy(26,5);cprintf("*汉字入通用测试系统*\n");
   gotoxy(26,6);cprintf("*娄底经贸学校*\n");
   gotoxy(26,7);cprintf("*微机教研室*\n");
   gotoxy(26,8);cprintf("李必岩 *\n");
   gotoxy(26,9);cprintf("1999.10\n");
   gotoxy(26,10);cprintf("*********\n");
   cprintf("\n\n");
   gotoxy(8,2);
   cprintf("班级:");
   scanf("%s",&x);
   gotoxy(22,2);
   cprintf("姓名:");
   scanf("%s",&xm);
   gotoxy(12,12);
   cprintf("请输入测试时间<分钟>:");
   scanf("%d",&t);
   gotoxy(12,14);
   cprintf("[k1.txt][k2.txt][k3.txt][k4.txt][k5.txt]");
   gotoxy(12,16);cprintf("请输入标准本件名:");
   scanf("%s",&name);
   fp=fopen(name,"rt");
   if(!fp){cprintf("没有被 打开!!!\n");exit(1);}
   cprintf("\n\n");gotoxy(12,18);
   cprintf("设置录入方法,按任开始!!!!");
   getch();clrscr();
   textbackground(GREEN);textcolor(YELLOW);
   count=0;t1=time(NULL);
   window(8,3,67,22);
   while(! feof(fp)){
   h=2;h1=2;
   fread(buf,549,1,fp);clrscr();
   gotoxy(1,1);cprintf("%s\n",buf);
   gotoxy(1,h);
   j=strlen(buf);
   p=0;i=0;ch[0]='\0' ;
   while(i<j-1){
   CZ:
   if(i==60*(h1-1)+p) {p=p+1;i=i+1;h1=h1+1;h=h+2;gotoxy(1,h);}
   t2=time(NULL);tt=difftime(t2,t1)/60;
   if(tt>=0.1){v=count/tt;
   x1=wherex();y1=wherey();
   gotoxy(6,20);textbackground(RED);
   cprintf("时间:%7.2f分钟   录入速度:%7.2字/分钟",tt,v);
   textbackground(GREEN);gotoxy(x1,y1);}
   if(tt>=t) goto quit;
   ch[0]=getch();
   /*处理光标左*/
   if(ch[0]==75&&wherex()>2)
   {i=i-2;gotoxy(wherex()-2,wherey());}
   /*处理光标右*/
   if(ch[0]==77)
     {gotoxy(wherex()+2,wherey());i=i+2;}
     /*处理光标上移*/
     if(ch[0]==72&&wherey()>2)
     {gotoxy(wherex(),wherey()-2);i=i-61;p=p-1;h1=h1-1;h=h-2;}
     /*处理光标下移*/
     if(ch[0]==80)
     {gotoxy(wherex(),wherey()+2);i=i+61;p=p+1;h1=h1+1;h=h+2;}
     if(ch[0]==32) {cprintf("  ");i=i+1;}
     if(ch[0]==27) goto quit;
     /*断所录入的汉 是否正*/
     if(ch[0]>160) {
     ch[1]=getch();ch[2]='\0';
     bh[i-60*(h1-2)-p]=ch[0];bh[i-60*(h1-2)-p+1]=ch[1];

     if(ch[0]==buf[i]&&ch[1]==buf[i+1]||buf[i]==0&&ch[1]==buf[i+1])
     {++count;x2=wherex();y2=wherey();cprintf("%s",ch);i=i+2;
     textbackground(5);
     gotoxy(x2,y2-1);cprintf("%s",ch);
     gotoxy(wherex(),wherey()+1);textbackground(GREEN);
     if(i==(60*(h1-1)+p)) goto CZ;}
     else {cprintf("%s",ch);i=i+2;} ch[0]='\0';}
     /*处理格*/
     if(ch[0]==8&&wherex()>2)
 {i=i-2;x3=wherex();y3=wherey();
 gotoxy(wherex()-2,wherey());
 cprintf(" "); gotoxy(wherex(),wherey()-1);
 textbackground(GREEN);cprintf("%c%c",buf[i],buf[i+1]);
 gotoxy(wherex(),wherey()+1);
 if(bh[i-60*(h1-2)-p]==buf[i]&&bh[i-60*(h1-2)-p+1]==buf[i+1])
   count=count-1;}
   }
   }
   quit:
   sound(1000);delay(500) ;nosound();
   sound(800) ;delay(500) ;nosound();
   fclose(fp);
   v=count/tt;
   window(1,1,80,25);
   textbackground(BLUE);textcolor(YELLOW);
   clrscr();
   gotoxy(25,4);cprintf("班级:%s",x);
   gotoxy(25,6);cprintf("姓名:%s",xm);
   gotoxy(25,8);cprintf("录入时间长度:%7.2f分钟",tt);
   gotoxy(25,10);cprintf("平均录入速度:%7.2f分钟",v);
   gotoxy(25,12);cprintf("录入的正确为:%4d",count);
   gotoxy(25,16);cprintf("按ESC继....");
   while(getch()!=27);
   gotoxy(15,18);cprintf("从来(Y/N)");
   cc=getch();
   }while(cc=='Y'||cc=='y');
   directvideo=1;closegraph();exit(0);
   }



希望大家能帮我一下用组模的形式写一下了
  一定给分

#7


有些地放有些笔误,我以通个调式了
      希望高用帮我一下了

#8


主要有三部分也就是三个函
1:基本的图形处理包括个人的资料的输入,比喻姓名,班级了,时间;
2:汉字的处理包括判断汉字是否正确了
3:基本的图形处理包括输出那些个人资料;
  把这三部分放到一个main函数中,是正确的;
    但是我想用三个函数来实现,应该怎么做呀?
     特别是第二个函数有多个要返回的值,不知道怎么
去处理这些了,希望高手提点思路了

#9


递二个问题为什么要多个返回值?如果非要不可,可以考虑返回指针

#10


比喻在第二个函数中要返回
   录入时间长度
   平均录入速度
   录入的正确为
   我用指针做不好呀
   请高手帮忙呀???

#11


如果都是数值的话,可以考虑返回一个数组的首地址

#12


你够强,这也能写出来

#13


兄弟你的程序是不是要中文操作系统的支持?

#14


我越看越佩服你了。写了这么长的程序。我从来不能写这么长的程序。呵呵。

我觉得你把个人资料定义为一个结构有利于程序的清晰。

第2个函数 你也可以定义一个结构。然后返回结构的地址。

我是这样想的。不知道你认为是怎么样的。我想这样应该可以吧。

#15


chengdulang(成都狼)
谢谢你了给我的思路呀!!


#16


那位高手给能不能给我做一下呀??

#17


你可以考虑定义一个数据结构,比如类,或者结构,该类包含你要返回的信息的项目。

class Info
{
  public:
  Info();
  float time_length; //存放录入时间长度
  int wpm;//存放速度
  float rate; //存放正确率
  //还可以添加别的你想要统计的信息
}; 

用法:

Info * fun2(..)
{
  Info * myinfo = new Info();
  Info->wpm = 200;
  Info->rate = 0.98;
  ...
  return myinfo;  
 }

//这里类写得很草率,事实上你可以封装这些数据成员,用成员函数来存取他们的值。
当然也可以用结构来实现,是一样的。