我正在使用此代码来检查输入的学号是否是正确的位数。是否有像 .length() 这样的函数适用于变量类型 double?谢谢!
do {
cout << "Student's number: (Numeric only)";
cin >> studentNumber;
cin.ignore();
}
while (studentNumber.length() != 6);
我正在使用此代码来检查输入的学号是否是正确的位数。是否有像 .length() 这样的函数适用于变量类型 double?谢谢!
do {
cout << "Student's number: (Numeric only)";
cin >> studentNumber;
cin.ignore();
}
while (studentNumber.length() != 6);
将其作为字符串读取,在它仍然处于该表示形式时检查它的长度(还要检查它是否仅由 组成[0-9]
),然后转换为双精度。实际上,如果你打算用它做数学,只转换成双精度数。否则将其保留为字符串。
一般来说,以非字符串类型获取用户输入是充满危险的。将其作为字符串读取,验证并转换。
将其读取为文本,对其进行验证,然后对其进行解析:
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());
do {
cout << "Student's number: (Numeric only) " << flush;
} while( !( cin >> studentNumber ) ||
( studentNumber < 100000 ) ||
( studentNumber > 999999 ) );
放置cin >> studentNumber
在其中while
还可以确保用户输入的文本成功转换为任何类型studentNumber
。
你不能只使用<
and>
吗?
// Require that studentNumber be 3 digits
if(studentNumber < 100 || studentNumber >= 1000) {
cout << "bad" << endl;
}
如果切换到整数类型,简单的除法可以做到这一点:
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;
}
你为什么不使用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 位数字时。