- ベストアンサー
scanfのことで質問なんですが…
unsigned long long int n; printf("Please input value : \n"); scanf("%llu", &n); printf("n = %llu\n", n); という感じで入力した数字をそのまま出力するプログラムを組んだのですが、そのまま表示されません。どうしてなんでしょうか??? コンパイルは通るのですが…。 また、解決方法はどんなものがあるのでしょうか??? 教えていただければ助かります。 お願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
FreeBSD の gcc-2.7.2.1 で実行しましたが、特に問題なく動作します。 もしかして、変数の最大値を超えて入力してはいませんか? 固定領域長の変数だと、どんなコンパイラでも上限は存在します。 bash-2.02# ./a.out Please input value : 4294967295 n = 4294967295 bash-2.02# ./a.out Please input value : 4294967296 n = 0 巨大な整数で計算したい場合は、多バイト長整数ライブラリを使用して下さい。 サンプルとして g++ の Integer.h を使用した例(適当すぎるけど^^;)を載せます。 bash-2.02# cat test2.cc #include <std.h> #include <g++/Integer.h> int main( int ac, char *av[] ) { Integer *val1 = new Integer(100); Integer *val2 = new Integer(100); *val1 = atoI("12345678901234567890"); *val2 = atoI("56789012345678901234"); cout << *val1 << " + " << *val2 << " = \n\t" << *val1 + *val2 << "\n"; cout << *val1 << " * " << *val2 << " = \n\t" << *val1 * *val2 << "\n"; return 0; } bash-2.02# ./a.out 12345678901234567890 + 56789012345678901234 = 69134691246913469124 12345678901234567890 * 56789012345678901234 = 701098911537997408286566514313977776260
その他の回答 (2)
- BLACKTALON
- ベストアンサー率37% (110/293)
表示されないと言うのはどういうことですか? どんな感じになるのでしょうか。
お礼
ありがとうございました。 無事解決いたしました…。
補足
すいません。説明不足でした。 ubsign long long int型の変数に 4294967295以上の数を入力した場合に正しく出力されないのです。 それをするためにはどうすれば良いのでしょうか?
- Ryo_Hyuga
- ベストアンサー率38% (61/158)
えっと...まず使っているソフトを教えてください。 Windowsアプリを作るソフト(VC++など)では、使えないこともあるので... もう少し詳しい状況(どんなプログラムを作ろうとしたのかなど)を教えていただけるとありがたいです。
お礼
ありがとうございました。 無事解決いたしました…。
補足
今作成しているのは、大きい数の素因数分解を行うプログラムです。 使っているのはよく分かりません…。 でもLinuxを使っています。
お礼
詳しい説明ありがとうございました。 おかげ様で無事解決することができました。