我对编码完全不熟悉,所以请在评论之前记住这一点。
所以我一直想尝试编码一段时间,今天我去了图书馆 并拿起一本名为“用c ++编程”的书。我写了一些基本的程序, 但我一度陷入困境,我不知道如何创建一个功能 确保当提示用户输入double时,他们输入的内容是有效的。 (如果用户输入像'k'这样的字符,程序就会中断)。 我在这里和网上搜索,有一些答案,但他们更多 “这是一行有效的代码行,将x,y,z插入其中”。我没有 有足够的经验知道该怎么做。所以这是一个混合代码的示例 从另一个问题,我没有尝试使其在我的程序中工作:
#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&lt;&lt; x”获取x的用户输入,并且 然后确保x是双倍的,我在这方面做得很难。如果 有人可以用澄清每项操作的方式解释这一点, 我真的很感激。例如,我不知道break函数的作用, 以及cin.clear()和cin.get()的作用。 (我知道这是重复的,但是 关于另一个问题的答案根本没有解决我困惑的问题, 感谢您花时间阅读和阅读回答这个! :)
答案 0 :(得分:2)
这似乎与您的代码(大多数)有效相似:
double GetDouble () {
double x;
cin >> x;
// ver1: while( cin.fail() ) // or !cin.good() no trailing char check.
while( cin.fail() || (cin.peek() != '\r' && cin.peek() != '\n'))
{
cout << "Invalid Input! Please input a numerical value." << endl;
cin.clear();
while( cin.get() != '\n' ); // or cin.ignore(1000, '\n');
cin >> x;
}
return x;
}
答案 1 :(得分:1)
首先,double是一个关键字,因此您不需要在条件语句中使用它。 其次,你可以在while循环中使用cin&gt;&gt; x然后处理x,下面给出了一个示例代码:
while(cin>>x)
{
//process
}
每当你在while语句中使用任何东西时,它首先检查它的有效性。 例如,如果用户输入一个字符,条件将评估为false,然后您可以告诉用户。通过这种方式,您可以运行循环,直到用户输入正确的输入。 至于break关键字的功能,它会让你走出循环,对于前
for(int i=10; i>0; i++)
{
// do something
}
将继续保持运行,但假设您将代码重写为:
for(int i=10; i>0; i++)
{
if(i==15)
break ;
}
一旦i的值达到15
,循环就会结束答案 2 :(得分:0)
像这样:
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;
}
像这样使用
const double d1 = getDouble();
const double d2 = getDouble("Please Enter a number: ", "Error! Enter a valid number: ", 1000);
答案 3 :(得分:-1)
休息突破循环(在这种情况下,一段时间) cin.clear()清除所有字符的cin缓冲区。 cin.get()从cin获取单个字符(可能是标准的)。