论坛: 编程破解 标题: 烟雨平生的一段C语言程序,请帮忙改错。 复制本贴地址    
作者: 286 [unique]    版主   登录
烟雨平生的原贴
------------------------
int bgetnum(int x,int y)
    {
    #include "ctype.h"
    int c,num;

    num=0;
    setcolor(1);
    setfillstyle(SOLID_FILL,3);
    bar3d(x-5,y-5,x+53,y+20,0,0);
    outtextxy(x,y,"QQWW");
    moveto(x+8,y+10);
    while((c==getch())!='\r'&&num<999){
    if(c=='\x8'&&num>0){
    moverel(-8,0);
    bar(getx(),gety(),getx()+8,gety()+6);
    num/=num;
    continue;}
    if(isdigit(c)==0)continue;
    outtext(&c);
    num=num*10+c-48;}
    num=(num/100)*94+num%100+quwe;
    return(num);
    }
这个有问题,我找不出啊


Garu 回答
-----------------------------------
没调试你的程序,但起码#include "ctype.h"不应该加在函数体内

286的说明
------------------------------------
不好意思,我本来想修改你的标题,不小心误点“删除”,后在采用后退键还能找到原内容。
兄弟,我说过多次,在这里大家都会帮助你的,所以请直接把要问的内容写到标题上。
还有就是,你只说有问题,什么问题呢?你应该说出来,不然的话,你只是一个程序段,别人哪有那么多时间从头分析呢?你说出来,更多的人才会参与思考讨论。

你的程序我也看不出来意图,另外,#include "ctype.h"虽然可以放到函数体内(仅限于VC,TC不行),但这种用法一般不多,你不妨放到头部。
把你的意图和出错提示写出来。



地主 发表时间: 04-01-16 09:13

回复: lida1818 [lida1818]   论坛用户   登录
警告��  test2.c 78: 指针转换后指向其它类型 在函数       

    outtext(&c);<----test2.c 78

程序test2.c编译通过,但提示如上。运行后调用该函数时死机。我是想取汉字的机内码。

B1层 发表时间: 04-01-16 10:25

回复: 286 [unique]   版主   登录
兄弟,还能这样打印数字吗?
char str[100];
itoa(&c,str);
outtext(str);<----test2.c 78



B2层 发表时间: 04-01-16 11:40

回复: lida1818 [lida1818]   论坛用户   登录
哈,我去试试

B3层 发表时间: 04-01-16 14:04

回复: lida1818 [lida1818]   论坛用户   登录
  int ggetnum(int x,int y)
    {

    int c,num;
    char str[100];

    num=0;
    setcolor(1);
    setfillstyle(SOLID_FILL,3);
    bar3d(x-5,y-5,x+53,y+20,0,0);
    outtextxy(x,y,"QQWW");
    moveto(x+8,y+10);
    while((c==getch())!='\r'&&num<999){
    if(c=='\x8'&&num>0){
    moverel(-8,0);
    bar(getx(),gety(),getx()+8,gety()+6);
    num/=num;
    continue;}
    if(isdigit(c)==0)continue;
    itoa(&c,str);
    outtext(str);
    num=num*10+c-48;}
    num=(num/100)*94+num%100+quwe;
    return(num);
    }


警告��  test2.c 73: 可能在'c'定义以前使用了它 在函数   
警告��  test2.c 74: 可能在'c'定义以前使用了它 在函数       
警告��  test2.c 79: 可能在'c'定义以前使用了它 在函数       
错误  test2.c 80: 太少的参数在调用'itoa' 在函数       
错误  test2.c 80: 类型不匹配在参数'value'在调用'itoa' 在函数


是不是这样改?#include "ctype.h"我也移走了。还是不行啊。是不是问题不是在这个函数内啊?我用的是WINTC。 

   

B4层 发表时间: 04-01-16 14:20

回复: 286 [unique]   版主   登录
int c,num  => char c;
              int num;


while((c==getch())!='\r'&&num<999){  =>while((c=getch())!='\r'&&num<999){

num=(num/100)*94+num%100+quwe;  ====> quwe?



B5层 发表时间: 04-01-16 15:34

回复: lida1818 [lida1818]   论坛用户   登录
#include "ctype.h"
void *Rar,*em;
long quwe;
main(){


不错啊,全局的,定义了


B6层 发表时间: 04-01-16 19:24

回复: lida1818 [lida1818]   论坛用户   登录
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
#include "graphics.h"
#include "io.h"
#include "fcntl.h"
#include "ctype.h"
#include "stdio.h"
void *Rar,*em;
long quwe;
main()
{
int chr,ifp;
long length;
unsigned char data[73],fn[50];
int gmode,gdriver;
  puts("Enter LIB24-filename");
  scanf("%s",fn);
  ifp=open(fn,O_RDWR|O_BINARY);
  if(ifp==-1){cputs("err on open");exit(1);}
  if(filelength(ifp)<580000L)quwe=-1054L;
  if(filelength(ifp)>580000L&&filelength(ifp)<600000L)quwe=-95L;
  if(filelength(ifp)>600000L)quwe=161L;
  detectgraph(&gdriver,&gmode);
  if(gmode==CGAHI)gmode=CGAC0;
  initgraph(&gdriver,&gmode,"d:\\win-tc");
  arrow();
  cmcnu();
  setcolor(1);
  setbkcolor(15);
  rectangle(4,4,310,195);
  setviewport(10,10,188,188,0);
  drawcom('r',0);
  drawcom('c',0);
  drawcom('q',0);
  while((chr=getch())!='q'&chr!='Q')
  switch(chr){
  case 'r':
  case 'R':readcode(ifp,&length,data,0);
    break;
    case 'e':
    case 'E':editcode(ifp,length,data);
          break;
          }
    closegraph();
    close(ifp);
    }
    int drawcom(char c,int f)
    {
    char *a[]={"Read","Edit","Quit"};
    int i=0;
    if(c=='r'||c=='R')i=0;
    if(c=='e'||c=='E')i=1;
    if(c=='q'||c=='Q')i=2;
    setcolor(1);
    setfillstyle(SOLID_FILL,2+f);
    bar3d(240,i*40-10,300,(i+1)*40-10,0,0);
    outtextxy(260,10+40*i,a[i]);
    }


    int ggetnum(int x,int y)
    {

    int c,num;


    num=0;
    setcolor(1);
    setfillstyle(SOLID_FILL,3);
    bar3d(x-5,y-5,x+53,y+20,0,0);
    outtextxy(x,y,"QQWW");
    moveto(x+8,y+10);
    while((c==getch())!='\r'&&num<999){
    if(c=='\x8'&&num>0){
    moverel(-8,0);
    bar(getx(),gety(),getx()+8,gety()+6);
    num/=num;
    continue;}
    if(isdigit(c)==0)continue;
    outtext(&c);
    num=num*10+c-48;}
    num=(num/100)*94+num%100+quwe;
    return(num);
    }

    int chat(unsigned char by[])
    {
    int i1,i2,i3,x,y;
    unsigned char c;

      clearviewport();
      setcolor(2);
      for(x=5,y=5,i1=0;i1<25;x+=7,i1++)line(x,y,x,y+168);
      for(x=5,y=5,i2=0;i2<25;y+=7,i2++)line(x,y,x+168,y);
      setcolor(2);
      setfillstyle(SOLID_FILL,2);
      for(i1=0;i1<24;i1++)
        for(i2=0;i2<3;i2++)
          for(i3=0;i3<8;i3++)
          if(getbit(by[i1*3+i2],7-i3))
          bar(5+7*i1,5+7*(i2*8+i3),12+7*i1,12+7*(i2*8+i3));
          return;
          }


  int readcode(int handle,long *l,unsigned char by[])
          {

          long length;
            drawcom('r',1);
            length=72L*ggetnum(185,20);
            lseek(handle,length,SEEK_SET);
            _read(handle,by,72);
            *l=length;
            chat(by);
            drawcom('r',0);
            }


  int editcode(int handle,long length,unsigned char by[])
  {
    extern void *Rar;
    int v,x,y,k;
    unsigned char c;
    long l;
    void *gp;

    drawcom('e',1);
    setcolor(2);
    setfillstyle(SOLID_FILL,2);
    bar(200,0,205,5);
    gp=malloc(imagesize(200,0,205,7));
    getimage(200,0,205,7,gp);
    putimage(200,0,gp,XOR_PUT);
    putimage(210,110,em,XOR_PUT);
    x=y=5;
    putimage(8,8,Rar,XOR_PUT);
    while(((v=getcom())!='e')&&(v!='E'))
      switch(v){

      case 's':
      case 'S':
      lseek(handle,length,SEEK_SET);
      _write(handle,by,72);
      break;

      case 'c':
      case 'C':
      putimage(x+1,y+1,gp,XOR_PUT);
      k=getbit(by[elem(x,y)],pbit(y));
      by[elem(x,y)]=putbit(by[elem(x,y)],pbit(y),1-k);
      break;

      case 'r':
      case 'R':
      readcode(handle,&l,by);
      x=y=5;
      putimage(8,8,Rar,XOR_PUT);
      break;

      case 2:
      case 3:
      case 4:
      case 5:
      putimage(x+3,y+3,Rar,XOR_PUT);
      if(v==2)x=x==5?23*7+5:x-7;
      if(v==3)x=x==23*7+5?5:x+7;
      if(v==4)y=y==5?23*7+5:y-7;
      if(v==5)y=y==23*7+5?5:y+7;

      putimage(x+3,y+3,Rar,XOR_PUT);
      break;
      }

      putimage(x+3,y+3,Rar,XOR_PUT);
      drawcom('e',0);
      putimage(210,110,em,XOR_PUT);
      return;
      }


      int elem(int x,int y)
      {

      return((x-5)/7*3+(y-5)/7/8);
      }

      int pbit(int y)
      {
      return(7-((y-5)/7)%8);
      }

      int arrow()
      {

      extern void *Rar;
      int size;
      int raw[]={0,0,0,4,2,4,10,12,12,10,4,2,4,0,0,0};
      setfillstyle(SOLID_FILL,2);
      fillpoly(8,raw);
      size=imagesize(0,0,12,12);
      Rar=malloc(size);
      getimage(0,0,12,12,Rar);
      putimage(0,0,Rar,XOR_PUT);
      return;
      }

      int cmcnu()
      {
      extern void *em;
      int size,h,l,i;
      char *c[]={"Change","Save","Exit","Read form"};
      char *c1[]={"C","S","E","R"};

      setcolor(2);
      setfillstyle(SOLID_FILL,3);
      h=textheight("H");
      l=textwidth(c[0]);
      size=imagesize(0,0,l+40,4*h+40);

      em=malloc(size);
      bar3d(0,0,l+40,4*h+40,0,0);
      for (i=0;i<4;i++){
      setcolor(2);
      outtextxy(10,5+(h+10)*i,c[i]);
      setcolor(1);
      outtextxy(10,5+(h+10)*i,c1[i]);
      }
      getimage(0,0,l+40,4*h+40,em);
      putimage(0,0,em,XOR_PUT);
      return;
      }

      int getcom(void)
      {
      #include "bios.h"

      int key;
          while(bioskey(1)==0);
          key=bioskey(0);
          if(key==0x4b00)return(2);
          if(key==0x4d00)return(3);
          if(key==0x4800)return(4);
          if(key==0x5000)return(5);

          key &=0xff;
          return(key);
          }

    int getbit(unsigned char c,int n)
    {
    return((c>>n)&1);
    }

    int putbit(unsigned char c,int n,int m)

    {
    int i;
    if(m==0)return(c&(1<<n));
    return(c|(1<<n));
    }


那位好心的给调试一下,出错提示同上。谢谢了

B7层 发表时间: 04-01-19 22:58

回复: 286 [unique]   版主   登录
还没解决吗?
兄弟,你先看看着贴里的“286说明”,OK?

B8层 发表时间: 04-01-20 09:12

回复: hannyu [hannyu]   论坛用户   登录
我的帖子没人看

B9层 发表时间: 04-01-20 09:31

回复: lida1818 [lida1818]   论坛用户   登录
286大哥啊,我再三地反复地仔细也阅读了“286的说明”,还是没有领会你的意思。请直接告诉我吧。谢了!

B10层 发表时间: 04-01-20 11:34

回复: 286 [unique]   版主   登录
还有就是,你只说有问题,什么问题呢?你应该说出来,不然的话,你只是一个程序段,别人哪有那么多时间从头分析呢?你说出来,更多的人才会参与思考讨论。



B11层 发表时间: 04-01-20 12:31

回复: lida1818 [lida1818]   论坛用户   登录
286大哥,是这样的,程序我另行编写过,已经做好了,可以用了。但是,我上面的写法有错吗?我看不出来,所以来求教啊。烦你抽点时间编译调试一下好不好?我用的是WINTC。

警告��  test2.c 73: 可能在'c'定义以前使用了它 在函数        《----while((c==getch())!='\r'&&num<999){
警告��  test2.c 74: 可能在'c'定义以前使用了它 在函数        〈---    if(c=='\x8'&&num>0){
警告��  test2.c 79: 可能在'c'定义以前使用了它 在函数        〈----    if(isdigit(c)==0)continue;

编译可以,警告如上。使用时调用int ggetnum(int x,int y)
时要死机



B12层 发表时间: 04-01-21 13:14

论坛: 编程破解

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号