鱼C论坛

 找回密码
 立即注册
查看: 1612|回复: 4

UNGETC问题

[复制链接]
发表于 2015-3-14 10:51:36 | 显示全部楼层 |阅读模式
5鱼币
int high( void )/*用于计算表达式中级别最高的运算,即带()的运算*/
{
int result;
if( token == '(' ) /*带有括号的运算*/
{
match( '(' );
result = low();/*递归计算表达式*/
match(')');
}
else if ( token>= '0'&&token<='9' ) /*实际的数字*/
{
ungetc( token, stdin ); /*将读入的字符退还给输入流,为读取整个数*/      
scanf( "%d", &result ); /*读出数字*/
token = getchar();  /*读出当前的标志*/      
}
else
{
printf("The input has unexpected char\n"); /*不是括号也不是数字*/
exit(1);
}
return result;
}
   能具体解答ugetc这里吗,谢谢!求解答

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-3-15 09:53:27 | 显示全部楼层
居然没人回答
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-3-15 09:54:38 | 显示全部楼层
本帖最后由 死幽亡灵 于 2015-3-15 09:57 编辑

:mad:#define _CRT_SECURE_NO_DEPRECATE
#include<stdio.h>
void match(char);
        int mid(void);
        int low(void);
        int high(void);

char token;
        void match( char expectedToken ) /*对当前的标志进行匹配*/

{

if( token == expectedToken ) token = getchar(); /*匹配成功,获取下一个标志*/

else

{      

printf("cannot match\n");

/*匹配不成功,退出程序*/

}

}
        int mid(void)
{
        int div,result;
        result=high();
        while((token=='*')||(token=='/'))
        {
                if(token=='*')
                {
                        match('*');
                        result*=high();
                        break;
                }
                else if(token=='/')
                {
                        match('/');
                        div=high();
                        if(div==0)
                                break;
                        result/=high();
                        break;
                }
        
        }
        
        return result;

}


        int low( void )/*用于计算表达式中级别最低的运算*/

{

int result = mid(); /*计算比加减运算优先级别高的部分*/

while(( token == '+' ) || ( token == '-' ))

if ( token == '+')

{

match('+');     /*进行加法运算*/

result += mid();

break;

}

else if ( token == '-')

{

match('-');    /*进行减法运算*/

result -= mid();

break;

}

return result;

}

        int high( void )/*用于计算表达式中级别最高的运算,即带()的运算*/

{

int result;

if( token == '(' ) /*带有括号的运算*/

{

match( '(' );

result = low();/*递归计算表达式*/

match(')');

}

else if ( token>= '0'&&token<='9' ) /*实际的数字*/

{

ungetc( token, stdin ); /*将读入的字符退还给输入流,为读取整个数*/

scanf( "%d", &result );
printf("%d",result);
printf("%c",token);
token = getchar();  /*读出当前的标志*/

}

else

{

printf("The input has unexpected char\n"); /*不是括号也不是数字*/


}

return result;

}




int main()

{   

int result;  /*运算的结果*/                  

printf("*****************************************\n");

printf("**Welcome to use this simple calculator**\n");

printf("**Please input a multinomial like      **\n");

printf("**                    6-3*(5-1)/2+14/7 **\n");

printf("*****************************************\n");

token = getchar(); /*载入第一个符号*/




result = low(); /*进行计算*/

if( token == '\n' ) /* 是否一行结束 */

printf( "The answer is : %d\n", result );

else

{

printf( "Unexpected char!");

; /* 出现了例外的字符 */

}

scanf("%d",result);

return 0;

}
整个程序
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-3-15 14:20:37 | 显示全部楼层
ungetc 将读入的一个字符退还给输入流,用scanf( "%d", &result );将这个字符数字转为整型数字,以便用于加减乘除运算之中,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-3-16 10:26:03 | 显示全部楼层
是把这个字符送到scanf作输入
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-25 19:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表