死幽亡灵 发表于 2015-3-14 10:51:36

UNGETC问题

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这里吗,谢谢!求解答

死幽亡灵 发表于 2015-3-15 09:53:27

居然没人回答

死幽亡灵 发表于 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;

}
整个程序

Dragon_Y 发表于 2015-3-15 14:20:37

ungetc 将读入的一个字符退还给输入流,用scanf( "%d", &result );将这个字符数字转为整型数字,以便用于加减乘除运算之中,

死幽亡灵 发表于 2015-3-16 10:26:03

是把这个字符送到scanf作输入
页: [1]
查看完整版本: UNGETC问题