代码小优化
文章目录
- 代码优化
- 优化代码1--详见博客错误
- 优化代码2-cin问题
- 刷新cin错误日志
- `cin.get()`:
- `cin.ignore()`:
- 主要用法:
- 优化后
代码优化
优化代码1–详见博客错误
char buffer[1024] = {0}; // 接收服务器返回的数据
len = recv(clientfd, buffer, 1024, 0); // 接收数据if (len < 0 || len == 0)
{if (len == 0){cout << "server quit!" << endl;return 0;}else{cerr << "recv error" << endl;}
}
优化代码2-cin问题
刷新cin错误日志
int choice;
cin >> choice;
cin.get(); // 清空输入缓冲区
加入 手速快, 按错了,输入 按成多个字符啥的, cin错误日志不刷新, 会一直循环错误了
不然输入错误, cin一直是 错误, 循环错误了
cin.get()
:
- 读取一个字符:
cin.get()
是读取单个字符,包括空格和换行符。 - 不会跳过空格和换行符:
cin.get()
会读取输入流中的所有字符,不会忽略空格、制表符和换行符(这与cin >>
的行为不同,cin >>
会忽略空白字符)。 - 用于读取包含空格的输入:当你想读取包括空格的字符串或者逐字符输入时,
cin.get()
更合适。
cin.ignore()
:
用于清空输入缓冲区,避免缓冲区中残留的数据影响后续输入。
主要用法:
-
忽略一个字符:
cin.ignore();
- 用于丢弃一个字符,通常是换行符。
-
忽略直到指定字符:
cin.ignore(numeric_limits<streamsize>::max(), '\n');
- 读取并丢弃所有字符,直到遇到
\n
(包括\n
)。 \n
也会被丢弃,不会留在缓冲区中。
- 读取并丢弃所有字符,直到遇到
-
没有指定字符(比如
\n
)时:如果你不指定字符,
cin.ignore()
会继续丢弃缓冲区中的所有字符,直到达到指定的字符数或缓冲区末尾。例如:cin.ignore(numeric_limits<streamsize>::max());
这会忽略缓冲区中的所有字符,直到缓冲区为空。
-
处理无效输入(如输入非数字时)–重点
int num; while (!(std::cin >> num)) { // 如果输入的不是整数std::cin.clear(); // 清除错误状态std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // 丢弃整行std::cout << "Invalid input. Try again: "; }
优化后
if (!(std::cin >> choice)) { // 如果输入不是整数std::cin.clear(); // 清除错误状态std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // 丢弃整行continue; // 重新尝试输入
}
// cin.get(); // 读出 换行
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // 丢弃剩余字符, 直到遇到换行(如换行符)