首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >验证c++中的双精度值

验证c++中的双精度值
EN

Stack Overflow用户
提问于 2013-07-20 00:17:47
回答 4查看 4.9K关注 0票数 0

我是一个全新的编码新手,所以在评论之前请记住这一点。

所以我已经尝试编程一段时间了,今天我去图书馆拿起了一本叫“c++编程”的书。我已经写了一些基本的程序,但我有一点被卡住了,我不知道如何创建一个函数来确保当用户被提示输入double时,他们输入的内容是有效的。(如果用户输入像'k‘这样的字符,程序就会中断)。我在这里和网上搜索了一下,有一些答案,但他们更倾向于“这是一行有效的代码,在其中插入x,y,z”。我没有足够的经验知道该怎么做。这里有一个示例,它混合了另一个问题的代码,我没有在我的程序中尝试让它工作:

代码语言:javascript
复制
#include <iostream>
#include <stdio.h>


using namespace std;

double GetDouble () {
    double x;
    cin >> x;
    int valid = 0;
    while (valid == 0) {
        if (x == double) {
      return x;
      break;
  } else if (x != double) {
      cout << "Invalid Input! Please input a numerical value." << endl;
      cin.clear();
      while (cin.get() != '\n') ; // empty loop
    }
}
return x;
}

现在我想要做的是使用"cin << x“来获得x的用户输入,然后确保x是一个双精度数,我在这方面做得很失败。如果有人能以一种澄清每个操作的方式向我解释这一点,我将不胜感激。例如,我不知道break函数做什么,以及cin.clear()和cin.get()做什么。(我知道这是一个副本,但另一个问题的答案完全没有解决我的困惑,感谢您抽出时间阅读并回答这个问题!:)

EN

Stack Overflow用户

发布于 2013-07-20 03:18:18

大概是这样的:

代码语言:javascript
复制
double getDouble(const string& askMessage = "Please Enter a number: ",const string& errorMessage = "Please enter a valid number: ", const int numberOfTrials = 10){
 double userInput = 0.0;
 bool isValidInput = false;
 int trials = 0;
 do{
    cout << endl << askMessage;
    if(cin >> input) break;
    else{ 
      cin.clear(); //EDIT thanks ebyrob, forgot about this.
      std::cin.ignore(std::numeric_limits<streamsize>::max(),'\n');
      std::cout << errorMessage;
    }

 }while(!isValidInput || trials < numberOfTrials);

 return userInput;
}

像这样使用它

代码语言:javascript
复制
const double d1 = getDouble();
const double d2 = getDouble("Please Enter a number: ", "Error! Enter a valid number: ", 1000);
票数 0
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17750872

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档