C++ 测试输入是否为 double /字符

标签 c++ input loops

我正在尝试从用户那里获取输入,并且需要知道一种方法让程序识别输入不是一个double/char 这是我现在拥有的...但是当您输入错误类型的输入时

1) 双重测试只是无限循环

2) 即使输入正确,char one 也不会停止循环

int main () {
    double _double = 0;
    bool done = true;
while ( done ) {
    cout << "Please enter a DOUBLE:\n" << endl;
    cin >> _double;
    if ( _double > 0 ) { done = false; }
    if ( _double < 0 ) { cout << "\nthe number you entered was less than zero\nplease enter a valad number..." << endl; } 
    if(cin.fail()) { cin.clear(); }
}

done = false;
char _char = ' ';
while ( !done ) {
    cout << "Please enter a CHAR" << "\n";
    cout << "\t'y' = yes\n\t'n' = no" << endl;
    cin >> _char;
    if ( _char == 'y' || _char == 'n' ) { done = true; }
    if ( ! (_char == 'y' || _char == 'n') ) { cout << "\nyou have entered an invald symbol... \n" << endl; }
    if(cin.fail()) { cin.clear(); }
}

最佳答案

最好的办法始终是将您的输入读取为字符串。然后,您可以使用 std::strtod() 之类的函数来测试和转换为 double 。检查流是否失败然后重置它们充其量是容易出错的,并且不会给您产生良好错误消息的可能性。

例如:

string s;
cin >> s;
char * p;
double d = strtod( s.c_str(), & p );
if ( * p == 0 ) {
   cout << "Read double: " << d << endl;
}
else {
   cout << "Read string: " << s << endl;
}

指针“p”将指向第一个不能转换为 double 的字符。具体如何处理取决于您应用的逻辑。

关于C++ 测试输入是否为 double /字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2065392/

相关文章:

Ruby:编写一个一直运行到资源耗尽的循环程序?

javascript - 在 Javascript 中循环数组时检测值何时发生变化?

c++ - C++ 计时的纳秒精度

c++ - 在 tesseract、c++ 中释放 char* 时发生访问冲突

java - 在应用程序中包含软键盘

c - 为什么输入没有按照我的意愿进行?

c# - 将输入设置为默认音频设备 ( SetInputToDefaultAudioDevice() )

c - 如何在用 C 编写的类 FORTH 语言解释器中实现 LOOP

c++ - 如何使用 fopen 打开和读取 Windows 通用应用程序中的文件

c++ - 为什么这个 Blitz++ 代码不能编译?