while(cin.get() != ‘\n’); continue; 这个程序是怎么起到删除作用的
时间: 2024-09-12 18:11:51 浏览: 33
这段代码 `while(cin.get() != '\n'); continue;` 实际上并不起到删除作用,而是用来忽略输入流中直到换行符 `\n` 为止的所有字符,并且如果 `continue` 语句位于循环体内,它会结束当前的迭代并开始下一次的循环。这个代码段存在逻辑上的问题,因为分号 `;` 表示 `continue` 语句后面没有其他代码,所以 `continue` 不会执行任何操作。
如果想用 C++ 代码删除从当前位置到换行符的所有字符,可以使用以下代码段:
```cpp
while (cin.get() != '\n');
```
这段代码会一直读取输入直到遇到换行符,但是不会对输入流中的字符做任何处理,换行符之后的字符将会保留。然而,这并不会从输入流中“删除”字符,而是简单地跳过了它们。如果你想要实际从输入流中删除字符,这通常需要不同的方法,例如使用 `cin.ignore()` 函数来忽略一定数量的字符。
例如,要删除直到下一个换行符的所有字符,你可以这样做:
```cpp
cin.ignore(numeric_limits<streamsize>::max(), '\n');
```
这将会忽略直到下一个换行符之前的所有字符。`numeric_limits<streamsize>::max()` 表示忽略字符的最大数量,通常是输入缓冲区的大小。
相关问题
while(cin.get != ‘\n’); continue; 这个程序是怎么起到删除作用的
这段代码是用C++语言编写的,它的作用是读取输入直到遇到换行符('\n'),然后继续执行下一次循环,但实际上这段代码并不会起到删除作用。下面我将解释这段代码的工作原理以及它如何被用来删除输入中的字符。
代码段解释:
```cpp
while(cin.get != '\n')
continue;
```
- `cin.get` 是从标准输入(通常是键盘)读取下一个字符的函数。
- `while` 循环将一直执行,直到从输入中读取到换行符。
- `!= '\n'` 是一个条件表达式,判断读取的字符是否不等于换行符。
- 当 `cin.get` 读取到换行符时,条件 `cin.get != '\n'` 为假,循环结束。
- `continue` 语句用于跳过当前循环的剩余部分,并开始下一次循环迭代。在这个上下文中,它实际上没有作用,因为当条件失败时,循环已经自然结束。
这段代码如果要起到删除作用,它必须与其它逻辑结合。例如,如果你想删除所有换行符之前的所有字符,你可以使用下面的代码:
```cpp
while(cin.get() != '\n'); // 读取字符直到换行符,并忽略它们
```
上述代码中没有使用 `continue`,而是通过在 `while` 循环的条件中直接调用 `cin.get()` 来实现。它会持续读取并丢弃(忽略)所有输入直到换行符,从而实现删除换行符之前字符的目的。
如果需要更明确地“删除”字符,可以结合其他逻辑,如读取字符到缓冲区然后再清空缓冲区来实现。
#include<bits/stdc++.h> using namespace std; enum Token_value { NAME, NUMBER, END, PLUS = '+', MINUS = '-', MUL = '', DIV = '/', PRINT = ';', ASSIGN = '=', LP = '(', RP = ')' }; Token_value get_token(); double error(const string& s); double expr(bool get); double term(bool get); double prim(bool get); Token_value curr_tok = PRINT; double number_value; string string_value; map<string, double> table; int no_of_errors; int main() { table["pi"] = 3.1415926535897932385; table["e"] = 2.7182818284590452354; while (cin) { get_token(); if (curr_tok == END) break;// if (curr_tok == PRINT) continue;// cout << expr(false) << "\n"; } return no_of_errors; } Token_value get_token() { char ch = 0; // cin >> ch; do{ if(!cin.get(ch)) return curr_tok = END; }while (ch!='\n' && isspace(ch)); switch(ch){ case ':': case '\n': return curr_tok = PRINT; } 中各函数的作用
这段代码是一个简单的解释器,可以解析一些简单的数学表达式,如加减乘除等。下面是各个函数的作用:
- `Token_value get_token()`: 该函数用于获取下一个 token(即表达式中的一个基本单元),并更新全局变量 `curr_tok`。具体的 token 类型有 `NAME`(变量名)、`NUMBER`(数字)、`END`(结束符)、`PLUS`(加号)、`MINUS`(减号)、`MUL`(乘号)、`DIV`(除号)、`PRINT`(分号)、`ASSIGN`(赋值符号)、`LP`(左括号)和 `RP`(右括号)。
- `double error(const string& s)`: 该函数用于报告一个错误,并返回一个默认值 1.0。
- `double expr(bool get)`: 该函数用于解析一个表达式,将其计算出来并返回结果。如果 `get` 为 `true`,则在解析表达式之前会先获取一个 token。
- `double term(bool get)`: 该函数用于解析一个项,将其计算出来并返回结果。如果 `get` 为 `true`,则在解析项之前会先获取一个 token。
- `double prim(bool get)`: 该函数用于解析一个基本单元,将其计算出来并返回结果。如果 `get` 为 `true`,则在解析基本单元之前会先获取一个 token。
- `int main()`: 该函数是程序的主函数,其中定义了变量表 `table`,并且通过循环不断获取用户输入的表达式并解析计算,直到遇到结束符为止。
- 在 `main()` 函数中,通过调用 `get_token()` 函数获取下一个 token,并根据不同的 token 类型执行不同的操作。如果是结束符,则跳出循环;如果是分号,则继续循环;否则,调用 `expr(false)` 函数计算表达式的值,并输出结果。
总体来说,这段代码的逻辑比较简单,但其中涉及了一些 C++ 的语法和库函数的使用,需要有一定的编程基础才能看懂。
阅读全文