为什么c=getchar()不是合法的表达式
时间: 2023-10-03 14:06:57 浏览: 107
表达式 `c=getchar()` 是合法的,在 C 语言中,`getchar()` 是一个标准库函数,用于从标准输入流中读取一个字符。该函数返回读取的字符,因此可以将其赋值给变量 `c`,以便在程序的其他地方使用该字符。但是,如果没有包含 `<stdio.h>` 头文件,则编译器可能会报告错误,因为该头文件包含了 `getchar()` 函数的声明。因此,建议在使用 `getchar()` 函数之前始终包含 `<stdio.h>` 头文件。
相关问题
实现这个伪代码OperandType EvaluateExperssion(){ InitStack(OPTR); Push(OPTR, '#'); InitStack(OPND); c=getchar(); while(c!='#' || GetTop(OPTR)!='#'){ if(!In(c, op)) { Push(OPND, c); c=getchar(); } else{ switch(Precede(GetTop(OPTR), c)){ case '<': Push(OPTR, c); c=getchar(); break; case '=': Pop(OPTR, x); c=getchar(); break; case '>': Pop(OPTR, theta); Pop(OPND, b); Pop(OPND, a); Push(OPND, Operate(a, theta, b)); break; } } } return GetTop(OPND); }
这段伪代码实现了一个算术表达式的计算器。其中OPTR和OPND分别表示操作符栈和操作数栈,Push和Pop是栈的常用操作。
在主循环中,程序每次读入一个字符c,如果它是操作数,则将它压入操作数栈OPND中;如果它是操作符,则将它与操作符栈顶的操作符进行比较,根据算符优先级进行相应的操作。具体来说,如果当前操作符优先级低于栈顶操作符,则将它压入操作符栈;如果优先级相等,则弹出栈顶操作符;如果优先级高于栈顶操作符,则弹出栈顶操作符和操作数栈中的两个操作数,进行相应的运算,并将结果压入操作数栈OPND中。
当读入的字符为'#'且操作符栈顶也为'#'时,说明表达式已经读取完毕并计算完成,此时返回操作数栈OPND的栈顶元素,即为表达式的计算结果。
OperandType EvaluteExpression() { CreatStack(OPTR); //创建栈OPTR Push('#',OPTR); CreatStack(OPND); //创建栈OPND c=getchar(); while(c!='#'‖StackTop(OPTR)!='#') //匹配完成 { if (!In(c,OP)) {Push(c,OPND);c=getchar();} else switch(Precede(StackTop(OPTR),c)) { case'<':Push(c、OPTR);c=getchar(); break; case‘=’ :Pop(x,OPTR); c=getchar(); break; case'>':Pop(theta,OPTR); Pop(b,OPND); Pop(a,OPND); Push(operate(a,theta,b),OPND); break; } } return StackTop(OPND); }
这是一段伪代码,看起来是一个算术表达式的计算器。具体的实现需要结合 OPTR 和 OPND 栈的定义以及函数 In、Precede、operate 的实现。大致的思路是,从输入中读取字符,如果是操作数就压入 OPND 栈,如果是运算符就与栈顶元素比较优先级,根据优先级进行相应的操作,直到遇到 # 符号和 OPTR 栈顶元素都为 # 符号时停止计算,并返回 OPND 栈顶元素。
阅读全文