| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 549 人关注过本帖
标题:有关自动售糖机的问题,包括了编译原理部分的有穷自动机 有编译错误,自己思 ...
只看楼主 加入收藏
mrbendan
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2014-5-5
结帖率:0
收藏
已结贴  问题点数:20 回复次数:5 
有关自动售糖机的问题,包括了编译原理部分的有穷自动机 有编译错误,自己思路捋不出来错误
//投入1块或2块,并以#号结束输入  当大于等于3块时给块糖,有误时提示
 //糖有总量,每次给糖会总量减一
 //判断过程用了编译原理的有穷自动机部分,这是要求的。。。
 //输入大于等于3块钱时,会跳过下次判断,一直减总量直至总量为0
 //输入错误的量时,会一直跳出错误不停
 #include <stdio.h>
         int sum=5;//总糖数
char input[3];
 char token[3]=" ";
 int p_input;
 int p_token;
 char ch;
 char *word;
 int flag=1;
 char *scaner();
 int main()
 {
 while(sum>=1)//当糖的总量大于等于1时
{
printf("请投币,仅限于输入1、2分硬币并以#号结束投币:");
scanf("%[^#]s",input);   
 p_input=0;
 word=scaner();  //判断输入的硬币数能否通过功能scaner()
 if(flag==1){    //标志位为1时
printf("投入硬币足够,成功给糖!");
sum--;
 }
else{
     flag=1;
 }
 }
 printf("糖已售完!");
return 0;
 }
 char m_getch(){
 ch=input[p_input];
 p_input=p_input+1;
 return (ch);
 }//从输入缓冲区中读取一个字符到ch中
 void getbc(){
 while(ch==' '){
 ch=input[p_input];
 p_input=p_input+1;
 }
 }//去掉空白符号
 void concat(){
 token[p_token]=ch;
 p_token=p_token+1;
 token[p_token]='\0';
 }//拼接输入的字符串
 int one(){
 if(ch=='1')return 1;
 else return 0;
 }//判断是否为1元硬币
 int two(){
 if(ch=='2')return 1;
 else return 0;
 }//判断是否为2元硬币
 void error(){
 printf("您输入有误,不能出糖!");
flag=0;
 }
 char *scaner(){  //有穷自动机
p_token=0;
 m_getch();
 getbc();
 if(one()) //1-- 输入一块
{
concat();
 m_getch();
 if(one()){//11-  输入1块、1块
concat();
 m_getch();
 if(one()){//111
 word=token;
 return(word);
 }
 else if(two()){//112
 word=token;
 return(word);
 }
 else {//11x
 error();
 }
 }
 else if(two()){//12
 word=token;
 return(word);
 }
 else{//1x
 error();
 }
 }
 else if(two())
 {//2--
concat();
 m_getch();
 if(one()){//21
 word=token;
     return(word);
 }
 else if(two()){//22
 word=token;
     return(word);
 }
 else{//2x
 error();
 }
 }
 else{//x
 error();
 }
 }
搜索更多相关主题的帖子: include 自动机 
2014-05-05 22:37
top398
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:427
专家分:857
注 册:2014-5-2
收藏
得分:20 
连个缩进也没有,看起来费劲,只感觉一个字:黑。3块钱一个糖。
2014-05-05 22:49
top398
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:427
专家分:857
注 册:2014-5-2
收藏
得分:0 
先把这一句的输入变量格式改一下吧。
        scanf( "%[^#]s", input );
2014-05-05 22:57
mrbendan
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2014-5-5
收藏
得分:0 
回复 楼主 mrbendan
呃。。。 我把整个复制下来,格式可能有问题
2014-05-05 23:11
mrbendan
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2014-5-5
收藏
得分:0 
回复 2 楼 top398
呃。。可能格式问题,整个复制下来的
2014-05-05 23:12
mrbendan
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2014-5-5
收藏
得分:0 
回复 3 楼 top398
考虑这个问题了,是不是我这样写之后,第一次输入的写在数组的前几个位置,循环之后再输入只是在原来数组后面基础上继续赋值,所以对的一直执行,错的一直出错
2014-05-05 23:13
快速回复:有关自动售糖机的问题,包括了编译原理部分的有穷自动机 有编译错误, ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.028883 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved