dポイントプレゼントキャンペーン実施中!

こんばんわ。
C言語で簡単な支出計算プログラムみたいなのを作ったのですが、自分の思ったようなプログラムが書けません。

#include<stdio.h>
int main(int argc,char *argv[]){
int i;
int n1;
int a1,a2;
int sum=0;
puts("計算する日数を入力してください。");
printf("日数:");
scanf("%d",&n1);
for(i=1;i<=n1;i++){
printf("%d日目:",i);
scanf("%d",&a1);
sum+=a1;
}
printf("【%d日間の支出】:%d円\n",i-1,sum);
}

実行結果は以下のようになります。

計算する日数を入力してください。
日数:2
1日目:100
2日目:200
【2日間の支出】:300円

このプログラムだと1日に1つの支出しか計算してくれません。
1日で入力できる支出を複数にしたいのですが、つまり下のように

計算する日数を入力してください。
日数:3
1日目:100,150
2日目:200
3日目:300,150,1000
【3日間の支出】:1900円

のようにscanfで入力した数値を可変個の値にしたいのですが、
どのように実現したらよいでしょうか?
scanf("%d,%d"&a1,&a2);のように2つにしてれやば複数にはできますが
必ず2個入力しないとエラーになってしまいます。
調べた所va_listという可変引数リストが使えそうなのですが、
scanfでどのように使えばよいのかわかりません。
ご教授よろしくお願いします。

A 回答 (3件)

細かい部分はともかく、



if (scanf("%d", &n) == 1) sum += n;
while (scanf(",%d", &n) == 1) sum += n;

とすればscanfで実現できませんか?
あるいは上限が決まっているのであれば、

int n = scanf("%d,%d,%d", &n1, &n2, &n3);

として、nの値によっていくつ入力されたかを知ることができます。
    • good
    • 0
この回答へのお礼

確認が遅れてしまい申し訳ありません。
最初のアドバイスでもなんとかできましたが、
jactaさんの2行でもすんなりうごきました。
ifをこういう風に使うとは気づきませんでした。
勉強になります。
ありがとうございましたm(_ _)m

お礼日時:2008/11/25 01:14

書式文字列はしょせん文字列でしかないので, 変数を使えば当然「実行時に変える」ことはできます. ただし, 今の場合は「どれだけ読み込めばいいのか」が結局わからないので scanf を直接使うことはできないという結論に変わりはありません.


ちょっと変ではありますが, 「数値のあとの文字」を読み込んでその文字によって動作を変えることは可能です. つまり書式文字列として
%d%c
と指定すると数値のあとの文字をとることができますから, ループを組むことはできます.
    • good
    • 0

実行時に変えるのは無理でしょう。


どうやってもフォーマット文字列は変えられませんから。

日数と同じようにその日の入力数を取得してループさせるか、
文字列として読み込んで自分で切り分けるしかないのでは?
    • good
    • 0
この回答へのお礼

ありがとうございます。
よく調べもせず、なんでもできると思ってたみたいです。
文字列として読み込んで切り分けて数値に変換させてみようと思います。

お礼日時:2008/11/22 01:10

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