単純なプログラムの場合、割り当ては、10 桁の電話番号を受け取り、それをユーザーに読み返すプログラムを作成することでした。次のことを確実にするための管理が必要でした。
最初の桁が 0 ではありません。
入力された数が 10 の数字であること。
エラーチェックは単純に見えました。while ループを使用して、数値の範囲が 1000000000 から 9999999999 の間になるようにするとうまくいくと思いました。独立した計算によると、うまくいくようです。
while ((MDN - valueCheck < 0) || (MDN > 9999999999)) {
printf("Entered number is not ten digits. Please re-enter.\n");
scanf("%d", &MDN);
}
MDN
とはどちらvalueCheck
もlong long
型変数です (そのため、範囲は 2,147,483,647 を超えることができます。IIRC の long long は 64 ビットでした) が、32 ビットの整数としてリストされているように見えます2147483647
。同様に)、しかし 2,147,483,648 (またはそれ以上) を入力すると、 として表示され-2147483647
ます。
上記に関連して、より大きな数値を入力すると、値が 32 ビット整数の範囲をラップするだけでなくprintf
、ループの後のステートメントによって出力される電話番号は、入力された数値から制限の 2 倍を引いた値に常に等しくなります。 32 ビット整数。
私が望んでいたように、プログラムを実際に64ビット数値で動作させる簡単な方法はありますか? 数学を適切に機能させることができれば、アルゴリズムはしっかりしているように見えます。