MzJy 发表于 2023-4-7 15:57:21

关于cin对char类型多次输入的问题

typeIn为char类型,当输入一串字符,这个循环会多次输出 “请以【C】或【F】的形式输入温度单位:” ,如何在保留循环的前提下,避免多次输出?
do {
      std::cout << "请以【C】或【F】的形式输入温度单位: "<<std::endl;
      std::cin >> typeIn;

    } while (
      (typeIn != 'C') && (typeIn != 'c') &&
      (typeIn != 'F') && (typeIn != 'f')
);
ps.该题目为小甲鱼第五节C++快速入门例题

isdkz 发表于 2023-4-7 15:57:22

这个问题的原因在于,当你输入一串字符时,std::cin 会将它们逐个读取并赋值给 typeIn。

你可以通过在读取输入后清空输入缓冲区来避免多次输出。这里有一个改进后的代码示例:

#include <iostream>
#include <limits>

int main() {
    char typeIn;
    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')
    );

    // 在此处添加计算温度转换的代码

    return 0;
}

在这个示例中,我们使用 std::cin.clear() 来清除任何错误标志,并使用 std::cin.ignore() 来忽略输入缓冲区中的其余字符,

直到遇到换行符(或达到输入缓冲区的最大限制)。这样一来,循环就不会多次输出提示信息了。

MzJy 发表于 2023-4-7 16:40:40

isdkz 发表于 2023-4-7 16:22
这个问题的原因在于,当你输入一串字符时,std::cin 会将它们逐个读取并赋值给 typeIn。

你可以通过在读 ...

非常感谢,初学者小白受教了

MzJy 发表于 2023-4-7 16:44:58

isdkz 发表于 2023-4-7 15:57
这个问题的原因在于,当你输入一串字符时,std::cin 会将它们逐个读取并赋值给 typeIn。

你可以通过在读 ...

我有一个小疑问,引入的limits大致有什么功能,我在VS2022中未引用该头文件可以运行成功
页: [1]
查看完整版本: 关于cin对char类型多次输入的问题