こんばんわ。
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件)
- 最新から表示
- 回答順に表示
No.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の値によっていくつ入力されたかを知ることができます。
確認が遅れてしまい申し訳ありません。
最初のアドバイスでもなんとかできましたが、
jactaさんの2行でもすんなりうごきました。
ifをこういう風に使うとは気づきませんでした。
勉強になります。
ありがとうございましたm(_ _)m
No.2
- 回答日時:
書式文字列はしょせん文字列でしかないので, 変数を使えば当然「実行時に変える」ことはできます. ただし, 今の場合は「どれだけ読み込めばいいのか」が結局わからないので scanf を直接使うことはできないという結論に変わりはありません.
ちょっと変ではありますが, 「数値のあとの文字」を読み込んでその文字によって動作を変えることは可能です. つまり書式文字列として
%d%c
と指定すると数値のあとの文字をとることができますから, ループを組むことはできます.
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# C言語階乗の総和を求める 2 2023/03/04 23:31
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- C言語・C++・C# 至急教えてください!プログラミングの問題です。 割られる整数と割る整数を受け取って、商と余りを出力す 3 2022/07/05 10:23
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分 1 2022/07/19 17:03
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 malloc関数を使ってください!お願いします! 最 1 2022/07/21 09:28
- C言語・C++・C# 至急お願いします。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分母 3 2022/07/19 17:09
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Linuxで入力待ちなしkeyread関...
-
2進数の1の数を数える問題
-
正負を反転させて出力するプロ...
-
プログラミング初心者です。 Py...
-
日数を計算する方法
-
C言語について
-
VB カウントダウンタイマーの作...
-
VC++で文字列を数値に変換する方法
-
double型が正常に認識されてい...
-
プログラミングの問題です 「金...
-
fflush(stdin)の使い方とprintf...
-
実行結果の順番がおかしいんで...
-
Eclipseコンソール表示を、リセ...
-
getchar使用時の入力文字消去方法
-
scanf()で、エラー対応
-
EDITコントロールで入力できる...
-
C言語 逆ピラミッドの作り方
-
"scanf"でエンターで改行させな...
-
VisualStudio2019のコードアナ...
-
getcharをしながらwhile文で出...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
*をユーザーが入力した数字の数...
-
数字以外が入力されたらエラー...
-
正負を反転させて出力するプロ...
-
プログラミング初心者です。 Py...
-
java初心者です。入力されたの...
-
Eclipseコンソール表示を、リセ...
-
scanfが2回使えない・・・?;
-
C言語 逆ピラミッドの作り方
-
double型が正常に認識されてい...
-
ワードで文字を入力する時の変...
-
コマンドプロンプトからのEOFの...
-
Linuxで入力待ちなしkeyread関...
-
scanf が無視されます
-
C言語について
-
if文の条件にscanf関数を使うと…?
-
cout関数を使っているのですが...
-
enterでループ終了
-
"scanf"でエンターで改行させな...
-
C言語でgetchar();が上手く使え...
-
漢字のソートについて
おすすめ情報