鱼C论坛

 找回密码
 立即注册
查看: 1212|回复: 4

[已解决]cin在输入一串字符时对char类型赋值第一位字符而不选择报错

[复制链接]
发表于 2023-4-7 17:01:53 | 显示全部楼层 |阅读模式
1鱼币
还是上一个帖子的题,当输入为CCCCCCCCCCCC的时候,程序取第一个C而不报错,是否有可能实现当输入CCCCC或FFFFF时不报错
typeIn为char类型
do {
        std::cout << "请以【C】或【F】的形式输入温度单位: " << std::endl;
        std::cin >> typeIn;

        std::cin.clear();
        std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

    } while (
        (typeIn != 'C') && (typeIn != 'c') &&
        (typeIn != 'F') && (typeIn != 'f')
        );
最佳答案
2023-4-7 17:01:54
MzJy 发表于 2023-4-7 17:10
我其实是想实现当输入为多个字符时,不是只取第一位忽略后面的,而是直接提示重新输入

了解你的需求了。为了实现当输入多个字符时提示重新输入,你可以使用 std::string 类型读取输入,并检查输入字符串的长度。以下是一个修改后的示例:

  1. #include <iostream>
  2. #include <limits>
  3. #include <string>

  4. int main() {
  5.     char typeIn;
  6.     std::string input;

  7.     do {
  8.         std::cout << "请以【C】或【F】的形式输入温度单位: " << std::endl;
  9.         std::getline(std::cin, input);

  10.         // 检查输入字符串的长度是否为 1
  11.         if (input.length() != 1) {
  12.             std::cout << "无效输入,请重新输入一个单一字符。" << std::endl;
  13.             continue;
  14.         }

  15.         typeIn = input[0];

  16.     } while (
  17.         (typeIn != 'C') && (typeIn != 'c') &&
  18.         (typeIn != 'F') && (typeIn != 'f')
  19.         );

  20.     // 继续你的其他代码

  21.     return 0;
  22. }
复制代码


在这个版本中,程序使用 std::getline() 读取一整行输入,然后检查输入字符串的长度。

如果长度不为 1,程序将提示用户重新输入一个单一字符。只有当输入字符串长度为 1 且字符为 'C'、'c'、'F' 或 'f' 之一时,循环才会结束。

最佳答案

查看完整内容

了解你的需求了。为了实现当输入多个字符时提示重新输入,你可以使用 std::string 类型读取输入,并检查输入字符串的长度。以下是一个修改后的示例: 在这个版本中,程序使用 std::getline() 读取一整行输入,然后检查输入字符串的长度。 如果长度不为 1,程序将提示用户重新输入一个单一字符。只有当输入字符串长度为 1 且字符为 'C'、'c'、'F' 或 'f' 之一时,循环才会结束。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-4-7 17:01:54 | 显示全部楼层    本楼为最佳答案   
MzJy 发表于 2023-4-7 17:10
我其实是想实现当输入为多个字符时,不是只取第一位忽略后面的,而是直接提示重新输入

了解你的需求了。为了实现当输入多个字符时提示重新输入,你可以使用 std::string 类型读取输入,并检查输入字符串的长度。以下是一个修改后的示例:

  1. #include <iostream>
  2. #include <limits>
  3. #include <string>

  4. int main() {
  5.     char typeIn;
  6.     std::string input;

  7.     do {
  8.         std::cout << "请以【C】或【F】的形式输入温度单位: " << std::endl;
  9.         std::getline(std::cin, input);

  10.         // 检查输入字符串的长度是否为 1
  11.         if (input.length() != 1) {
  12.             std::cout << "无效输入,请重新输入一个单一字符。" << std::endl;
  13.             continue;
  14.         }

  15.         typeIn = input[0];

  16.     } while (
  17.         (typeIn != 'C') && (typeIn != 'c') &&
  18.         (typeIn != 'F') && (typeIn != 'f')
  19.         );

  20.     // 继续你的其他代码

  21.     return 0;
  22. }
复制代码


在这个版本中,程序使用 std::getline() 读取一整行输入,然后检查输入字符串的长度。

如果长度不为 1,程序将提示用户重新输入一个单一字符。只有当输入字符串长度为 1 且字符为 'C'、'c'、'F' 或 'f' 之一时,循环才会结束。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-4-7 17:06:13 | 显示全部楼层
你的代码已经可以实现你想要的功能了。当用户输入一串字符(例如 "CCCCCCCCCCCC" 或 "FFFFF")时,std::cin 只会读取并将第一个字符赋值给 typeIn 变量。接下来的 std::cin.clear() 和 std::cin.ignore() 会清除输入缓冲区,从而处理任何额外的字符。

在这个循环中,如果 typeIn 不是 'C'、'c'、'F' 或 'f' 中的任何一个,循环将继续执行。因此,用户必须输入这四个有效字符中的一个,否则程序将继续提示用户输入正确的字符。

所以,在你的代码中,当输入为 "CCCCCCCCCCCC" 时,程序将取第一个 'C' 并继续执行,不会报错。同样,当输入为 "FFFFF" 时,程序将取第一个 'F' 并继续执行,也不会报错。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-4-7 17:10:43 | 显示全部楼层
isdkz 发表于 2023-4-7 17:06
你的代码已经可以实现你想要的功能了。当用户输入一串字符(例如 "CCCCCCCCCCCC" 或 "FFFFF")时,std::cin ...

我其实是想实现当输入为多个字符时,不是只取第一位忽略后面的,而是直接提示重新输入
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-4-7 17:21:50 | 显示全部楼层
isdkz 发表于 2023-4-7 17:13
了解你的需求了。为了实现当输入多个字符时提示重新输入,你可以使用 std::string 类型读取输入,并检查 ...

懂了,不必纠结那个char,用个string然后判断长度就OK了,非常感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-4 16:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表