while((c=getchar())!='#'||(c = getchar())!='#')是什么意思
时间: 2024-05-13 20:15:42 浏览: 67
这是一个 while 循环,用于从标准输入中逐个读取字符,直到读取到两个 '#' 字符为止。每次从输入流中读取一个字符,并将其赋值给变量 c,然后判断这个字符是否等于 '#',如果等于就继续读取下一个字符,否则跳出循环。需要注意的是,这个循环可能会无限循环下去,因为第二个判断条件永远都是 true。正确的写法应该是使用逻辑运算符 || 连接两个判断条件,如下所示:
```
while ((c = getchar()) != '#' || (c = getchar()) != '#') {
// 循环体
}
```
这样,当第一个条件不满足时,才会继续判断第二个条件。
相关问题
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 栈顶元素。
#include<stdio.h> int main(void) { char ch; int th=0; while((ch=getchar())!='#') { switch(ch) { case '.':ch=='!'; th++; break; case '!': printf("!"); th++; break; default:break; } printf("%c",ch); } printf("%d次替换\n",th); return 0; } 怎么理解这c代码
这段C代码是一个简单的程序,它通过读取用户输入的字符并进行处理来统计替换次数。
代码解析如下:
1. 首先,包含了<stdio.h>头文件,这是C语言提供输入输出功能的标准库。
2. 主函数开始,返回类型为int,void表示没有参数。
3. 声明了一个字符类型变量ch和一个整型变量th,并将th初始化为0。
4. 进入while循环,循环条件是读取字符并判断是否等于'#'。如果输入的字符不等于'#',则进入循环体。
5. 在循环体内部,使用switch语句对输入的字符进行判断。
6. 当输入的字符为'.'时,将ch赋值为'!',并且th自增1。
7. 当输入的字符为'!'时,打印输出"!",并且th自增1。
8. switch语句中使用了default来处理其他情况,这里没有特定的操作。
9. 在switch语句结束后,使用printf函数输出当前字符ch。
10. 循环继续回到while条件判断处,直到输入的字符为'#'时跳出循环。
11. 最后使用printf函数输出th的值,即替换次数。
12. 返回0,表示程序执行成功结束。
总体来说,这段代码的功能是读取用户输入的字符,如果遇到'.'则替换为'!'并计数替换次数,最后输出替换次数。
阅读全文