0

このコードを使用して、入力された学籍番号が正しい桁数であることを確認しています。変数型 double で機能する .length() のような関数はありますか? ありがとう!

do {
    cout << "Student's number: (Numeric only)";
    cin >> studentNumber;
    cin.ignore();
}
while (studentNumber.length() != 6);
4

6 に答える 6

7

それを文字列として読み取り、その表現のままで長さを確認し (また、 のみで構成されていることも確認します[0-9])、double に変換します。実際には、それを使って計算する場合にのみ double に変換してください。それ以外の場合は、文字列として保持します。

一般に、文字列以外の型でユーザー入力を取得することには危険が伴います。文字列として読み取り、検証して変換します。

于 2012-09-25T21:22:48.697 に答える
3
do {
  cout << "Student's number: (Numeric only) " << flush;
} while( !( cin >> studentNumber ) || 
         ( studentNumber < 100000 ) || 
         ( studentNumber > 999999 ) );

cin >> studentNumber内に配置whileすることで、ユーザーが入力したテキストがこれまでのタイプに正常に変換されたことも保証されますstudentNumber

于 2012-09-25T21:22:36.243 に答える
1

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 'chars' である必要があります。これは次のように記述できます。

10^5 <= studentNumber < 10^6

また

5 <= log10(studentNumber) < 6

その後

floor(log10(studentNumber)) ==5

整数部が6桁の数字の場合のみ。

于 2012-09-25T21:21:13.333 に答える