cin在输入一串字符时对char类型赋值第一位字符而不选择报错
还是上一个帖子的题,当输入为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')
); MzJy 发表于 2023-4-7 17:10
我其实是想实现当输入为多个字符时,不是只取第一位忽略后面的,而是直接提示重新输入
了解你的需求了。为了实现当输入多个字符时提示重新输入,你可以使用 std::string 类型读取输入,并检查输入字符串的长度。以下是一个修改后的示例:
#include <iostream>
#include <limits>
#include <string>
int main() {
char typeIn;
std::string input;
do {
std::cout << "请以【C】或【F】的形式输入温度单位: " << std::endl;
std::getline(std::cin, input);
// 检查输入字符串的长度是否为 1
if (input.length() != 1) {
std::cout << "无效输入,请重新输入一个单一字符。" << std::endl;
continue;
}
typeIn = input;
} while (
(typeIn != 'C') && (typeIn != 'c') &&
(typeIn != 'F') && (typeIn != 'f')
);
// 继续你的其他代码
return 0;
}
在这个版本中,程序使用 std::getline() 读取一整行输入,然后检查输入字符串的长度。
如果长度不为 1,程序将提示用户重新输入一个单一字符。只有当输入字符串长度为 1 且字符为 'C'、'c'、'F' 或 'f' 之一时,循环才会结束。 你的代码已经可以实现你想要的功能了。当用户输入一串字符(例如 "CCCCCCCCCCCC" 或 "FFFFF")时,std::cin 只会读取并将第一个字符赋值给 typeIn 变量。接下来的 std::cin.clear() 和 std::cin.ignore() 会清除输入缓冲区,从而处理任何额外的字符。
在这个循环中,如果 typeIn 不是 'C'、'c'、'F' 或 'f' 中的任何一个,循环将继续执行。因此,用户必须输入这四个有效字符中的一个,否则程序将继续提示用户输入正确的字符。
所以,在你的代码中,当输入为 "CCCCCCCCCCCC" 时,程序将取第一个 'C' 并继续执行,不会报错。同样,当输入为 "FFFFF" 时,程序将取第一个 'F' 并继续执行,也不会报错。 isdkz 发表于 2023-4-7 17:06
你的代码已经可以实现你想要的功能了。当用户输入一串字符(例如 "CCCCCCCCCCCC" 或 "FFFFF")时,std::cin ...
我其实是想实现当输入为多个字符时,不是只取第一位忽略后面的,而是直接提示重新输入
isdkz 发表于 2023-4-7 17:13
了解你的需求了。为了实现当输入多个字符时提示重新输入,你可以使用 std::string 类型读取输入,并检查 ...
懂了,不必纠结那个char,用个string然后判断长度就OK了,非常感谢
页:
[1]