プロが教える店舗&オフィスのセキュリティ対策術

C言語で分からないところがあります。整数値の分割取得みたいなこと・・

で困っています。
僕はC言語初心者です。
コンパイラはVC2008です。

今回整数値を分割して取得したいと考えています。
例えば次のような整数値(int型)があったとします。

235465667

この整数値を3つにわけて取得したいのです。つまり

235
465
667

としたいのです。このような働きをしてくれる便利な関数はないのでしょうか?
調べてみたのですが、内容が内容だけに探しにくくて見つけられませんでした。

もし、関数がなければ、どのようにすれば取得できるかコードを教えてほしいです。
よろしくお願いします!

A 回答 (4件)

int a=235465667;


int b,c,d;

b = a / 1000000;
c = (a / 1000) % 1000;
d = a % 1000;
でいいの?
    • good
    • 1
この回答へのお礼

ありがとうございました!
教えて頂いたとおりにやると問題なく分けることができました。
教えて頂いたのを考えてみると単純なことで・・すいませんでした。

お礼日時:2010/04/06 23:02

あえていうなら sscanf() で出来無くはないですが、取り扱いが難しいので薦めはしません。



当然の注意点として、入力バッファの内容により変換に失敗することがあるので、scanf() の戻り値のチェックは欠かせません。

#include <stdio.h>

main()
{
char buf[100];
int a[5], i, n;

fgets(buf, sizeof(buf), stdin);
n = sscanf(buf, "%3d%3d%3d", a, a+1, a+2);
printf("%d: ", n);
for (i = 0; i < n; i++)
printf("%d, ", a[i]);
}
    • good
    • 0
この回答へのお礼

少し分からないところがありますが、おおまかには理解できました!
こんな仕方もあるんですね・・やはり自分はまだまだ未熟です。
ありがとうございました!

お礼日時:2010/04/06 23:20

「3つにわける」とはどのような操作なのでしょうか?


この 1例だけを見てあなたが思い描いている操作が分かる人はいないと思います. たとえば, 1029 が与えられたときにどうすればいいのか明確ではありません. ということで, 数式などを使ってあなたが希望する操作をきちんと書いてください.
もっとも, そんな不思議な機能を必要とする人が多いとは思えないので, 何らかの形で作らなければならないでしょうね.
    • good
    • 0
この回答へのお礼

質問の仕方が不十分でした。ごめんなさい。
他の方の回答を見ると理解できましたので、以後気をつけます。
本来は9桁の数字を前から順番に3桁ずつに分解するという動作を望んでいました。

ご指摘ありがとうございました。これから注意していきたいです。

お礼日時:2010/04/06 23:11

そんな都合の良い標準関数は存在しませぬ。


自力で作るしかありません。
そもそも、内容的に開発言語以前の問題。

ヒント(数値桁が固定だとして)
・235465667/10^6の整数同士の割り算の結果はいくら?
・その答えを10^6倍して元の数字から引くと、どんな数字が残る?

ちなみに235465667という数字はint型では桁溢れする
    • good
    • 0
この回答へのお礼

ごめんなさい。
教えて頂いたのを頭の中で整理すると簡単にできました。
発想がまったく追いつかずに迷惑をかけて申し訳ありませんでした・・。

分かりやすく教えてくださってありがとうございました!

あと、教えてもらってる分際で申し上げるのは恐縮なのですが、235465667は問題なく表示することができましたので、桁溢れはもう少し大きいのではないかと思います。
間違っていたらごめんなさい。

お礼日時:2010/04/06 23:08

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています