Chinaunix首页 | 论坛 | 博客
  • 博客访问: 687427
  • 博文数量: 156
  • 博客积分: 3402
  • 博客等级: 中校
  • 技术积分: 1639
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-13 14:06
个人简介

业余编程爱好者

文章分类

全部博文(156)

文章存档

2014年(1)

2013年(13)

2012年(46)

2011年(38)

2010年(58)

分类: LINUX

2012-03-26 19:18:23

cforth.c源代码更新,解决了必须要在每行命令输入的结尾加个空格的缺陷。
使用的方法是,在分解字符串之前,自动在字符串结尾添一个空格。
代码如下:

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <string.h>
  3. int ds[256],rs[256];
  4. int *dsp=ds,*rsp=rs;
  5. int flag;
  6. #include "code_words.h"
  7. #include "colon_words.h"

  8. char inputBuff[1024];
  9. char strBuff[30];

  10. int main()
  11. {
  12.     printf("Cforth 0.1.0, Copyright (C) 2008-2012 Free Software Foundation, Inc.\n");
  13.     printf("Cforth comes with ABSOLUTELY NO WARRANTY; for details type `license'\n");
  14.     printf("Type `bye' to exit\n");
  15.     while (1){
  16.         int i=0;
  17.         int j=0;
  18.         gets(inputBuff);

  19.         //以下一小段代码,用来解决必须在每行命令后加一个空格的缺陷
  20.         for(k=0;inputBuff[k]!='\0';k++); //取得inputBuff字符串的长度
  21.         inputBuff[k]=' '; //在inputBugg字符串的结尾添一个空格
  22.         inputBuff[k+1]='\0'; //在字符串末尾空格后添一个'\0'

  23.         while(inputBuff[j] != '\0'){
  24.             if(inputBuff[j]!= ' '){
  25.                 strBuff[i] = inputBuff[j];
  26.                 i++;
  27.                 j++;
  28.             }
  29.             else {
  30.                 strBuff[i]='\0';
  31.                 if ( !strcmp(".s",strBuff) ) showDS();
  32.                 else if( !strcmp("dup",strBuff) ) dup();
  33.                 else if( !strcmp(".",strBuff) ) showtopDS();
  34.                 else if( !strcmp(">r",strBuff) ) tor();
  35.                 else if( !strcmp("r>",strBuff) ) rto();
  36.                 else if( !strcmp("drop",strBuff) ) drop();
  37.                 else if( !strcmp("+",strBuff) ) add();
  38.                 else if( !strcmp("-",strBuff) ) sub();
  39.                 else if( !strcmp("*",strBuff) ) mul();
  40.                 else if( !strcmp("/d",strBuff) ) ddiv();
  41.                 else if( !strcmp("/",strBuff) ) div();
  42.                 else if( !strcmp("%",strBuff) ) mod();
  43.                 else if( isNum() ) chgNum();
  44.                 else if( !strcmp("say",strBuff) ) say();
  45.                 else if( !strcmp("bye",strBuff) ) return 0;
  46.                 else printf("\n[%s]?\n",strBuff);
  47.          
  48.                 for(i=0;i<30;i++) strBuff[i]='\0';
  49.                 i=0;
  50.                 j++;
  51.                }
  52.           }
  53.           showOK();
  54.       }
  55.     return 0;
  56. }

  57. int isNum()
  58. {
  59.     char *str=strBuff;
  60.     while(*str) {
  61.         if(*str<'0' || *str>'9') return 0;
  62.         str++;
  63.     }
  64.     return 1;
  65. }

  66. int chgNum()
  67. {
  68.     char *str=strBuff;
  69.     int sum=0;
  70.     while(*str) {
  71.         sum=10*sum+(int)(*str-'0');
  72.         str++;
  73.     }
  74.     //如果这个数字字符串只有一个'\0',则直接返回0。
  75.     //用来解决多余的空格键误操作DS的BUG
  76.     if(str==&strBuff[0]) return 0;
  77.     push(sum);
  78.     return 0;
  79. }

  80. int showOK()
  81. {
  82.     printf("OK\n");
  83.     return 0;
  84. }

  85. int say()
  86. {
  87.     gets(strBuff);
  88.     printf("cforth: [%s]\n",strBuff);
  89.     return 0;
  90. }

阅读(746) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~