我使用此代码来检查输入的学号是否是正确的数字位数。是否有像.length()这样的函数可用于变量类型double?谢谢!如何检查C++中双精度的长度
do {
cout << "Student's number: (Numeric only)";
cin >> studentNumber;
cin.ignore();
}
while (studentNumber.length() != 6);
我使用此代码来检查输入的学号是否是正确的数字位数。是否有像.length()这样的函数可用于变量类型double?谢谢!如何检查C++中双精度的长度
do {
cout << "Student's number: (Numeric only)";
cin >> studentNumber;
cin.ignore();
}
while (studentNumber.length() != 6);
它读成文本,对其进行验证,然后分析它:
std::string input;
bool valid = false;
while (!valid) {
cout << "Student's number: (Numeric only)";
cin >> input;
if (input.size() == 6)
valid = true;
}
double studentNumber = strtod(input.c_str());
为什么不使用log10?那么你需要四舍五入平定结果,也许用floor(double)找到整数
//remember math.h
#include <math.h>
do {
cout << "Student's number: (Numeric only)";
cin >> studentNumber;
cin.ignore();
}
while (floor(log10(studentNumber)) != 6);
编辑: 一点解释:LOG10让你找到X在这个等式
10^x=y
其中y,并给出是你的指数。
长话短说,studentNumber
必须是6 '字符',我们可以把这个作为
10^5 <= studentNumber < 10^6
或
5 <= log10(studentNumber) < 6
然后
floor(log10(studentNumber)) ==5
只有当它是整数部分有6位数字。
do {
cout << "Student's number: (Numeric only) " << flush;
} while(!(cin >> studentNumber) ||
(studentNumber < 100000) ||
(studentNumber > 999999));
的while
内放置cin >> studentNumber
也保证了用户输入的文本成功转换到什么都键入studentNumber
是。
将其作为字符串读取,并检查它的长度(仍检查其是否仅包含[0-9]
),然后转换为double。实际上,如果你打算用它做数学,那么只能转换成一个双。否则,保持它为一个字符串。
一般来说,在非字符串类型中用户输入是充满危险的。以字符串的形式阅读它,验证并转换。
其实这更有意义。因此,如果我从一开始就将变量更改为字符串,我如何确保不输入字符? – Blake
@Blake使用['std :: string :: find_first_not_of'](http://en.cppreference.com/w/cpp/string/basic_string/find_first_not_of)来验证该条目仅包含数字[0 ,9] – Praetorian
考虑'std :: string :: find_first_not_of'或相关的方法。如果你的教师要求你使用c风格的字符串,那么就是'strsep'。标准库是你的朋友。 – dmckee
难道你不能只使用<
和>
?
// Require that studentNumber be 3 digits
if(studentNumber < 100 || studentNumber >= 1000) {
cout << "bad" << endl;
}
如果是1.00001,该怎么办? –
@CrazyEddie然后你开始提出产生ID的系统的人。 –
如果切换到整型,简单的划分可以做到这一点:
long studentNumber;
do {
// get number
} while (!(studentNumber/100000L) || studentNumber/1000000L);
如果你真的想要一个完整的数字位数:
int long_digits(long l)
{
// this code will work for negative numbers, but we don't want them
if (l < 0L)
throw std::out_of_range("no negative numbers please");
int count;
for (count = 0; l; l /= 10L, ++count);
return count;
}
如果是学生ID,请勿使用双倍长时间使用。 – nneonneo
“studentNumber”的声明在哪里 - 例如它是什么类型? – marko
这看起来像一个规范的作业问题,所以我建议你可能会明智地执行更多的验证,而不仅仅是数字的长度,并考虑遇到非数字输入时会发生什么。 – marko