C言語で、条件をつけて値の合計を求めようと試みているのですが、以下のプログラムの「ここから下」の部分が機能していません。行いたいプログラム自体は間違っていないと思うのですが、機能しない理由がわかりません。修正方法を教えていただければ幸いです。
まず、何が目的なのかを説明します。
「TEST.csv」ファイルを読み込み、1列目の値一致しているもので、日付がt期とt+365期(ここでは2010年4月1日と2011年4月1日のみ該当)が存在すれば、4列目の値を合計します。この部分は上手く値の合計を求めてくれています。
問題なのは、「ここから下」の部分なのですが、ここでは、先ほどの計算で使われたt期の4列目の値の合計と、t+360期の4列目の値の合計を求めたいのですが、上手くいっていません。
「TEST.csv」の内容と、現状および目標のoutputは以下のとおりです。
------TEST.csv---------
100,2010/04/01,141,1
150,2010/04/01,412,4
200,2010/04/01,528,4
250,2010/04/01,378,2
525,2010/04/01,376,4
100,2010/04/11,282,2
150,2010/04/12,564,4
635,2010/04/14,658,7
200,2010/04/21,95,1
250,2010/04/24,190,2
745,2010/08/15,124,1
855,2010/09/23,412,4
100,2011/04/01,141,1
150,2011/04/01,412,4
200,2011/04/01,312,4
250,2011/04/01,378,2
555,2011/04/01,376,4
100,2011/05/01,282,2
150,2011/05/11,378,2
200,2011/05/25,95,1
666,2011/05/25,124,1
250,2011/06/01,190,2
777,2011/06/03,309,3
888,2011/09/09,412,4
-----------------------
-----------------現状--------------------
2010/4/1における「100」の値の合計は「282」
2010/4/1における「150」の値の合計は「824」
2010/4/1における「200」の値の合計は「840」
2010/4/1における「250」の値の合計は「756」
合計:「0」
合計:「0」
Program ended with exit code: 0
------------------------------------------
-----------------目標---------------------
2010/4/1における「100」の値の合計は「282」
2010/4/1における「150」の値の合計は「824」
2010/4/1における「200」の値の合計は「840」
2010/4/1における「250」の値の合計は「756」
合計:「1459」/*141+412+528+378の合計を表している*/
合計:「1243」/*141+412+312+378の合計を表している*/
------------------------------------------
#include <stdio.h>
#include <stdlib.h>
int main(void){
FILE *fp;
int gn[24],year[24],month[24],day[24],e[24],q[24];
int p;
int i,j,k;
int sum1,sum2;
if((fp = fopen("TEST.csv","r"))==NULL){
printf("not open\n");
exit(1);
}
for(p=0;p<24;p++){
fscanf(fp,"%d,%d/%d/%d,%d,%d",&(gn[p]),&(year[p]),&(month[p]),&(day[p]),&(e[p]),&(q[p]));
}
fclose(fp);
for(i=0;i<24;i++){
if(gn[i]==-1&&year[i]==-1&&month[i]==-1&&day[i]==-1) continue;
for(j=i+1;j<24;j++){
if(gn[j]==-1&&year[j]==-1&&month[j]==-1&&day[j]==-1) continue;
if(gn[i]==gn[j]&&year[j]==year[i]+1&&month[i]==month[j]&&day[i]==day[j]){
e[i] += e[j];
gn[j] = -1;
printf("%d/%d/%dにおける「%d」の値の合計は「%d」\n",year[i],month[i],day[i],gn[i],e[i]);
}
}
}
/*ここから下*/
sum1 = 0;
sum2 = 0;
for(i=0;i<24;i++){
if(gn[i]==-1&&year[i]==-1&&month[i]==-1&&day[i]==-1) continue;
for(k=i+1;k<24;k++){
if(gn[k]==-1&&year[k]==-1&&month[k]==-1&&day[k]==-1) continue;
if(gn[i]==gn[k]&&year[k]==year[i]+1&&month[i]==month[k]&&day[i]==day[k]){
sum1=sum1+e[i];
sum2=sum2+e[k];
gn[k] = -1;
}
}
}
printf("合計:「%d」\n",sum1);
printf("合計:「%d」\n",sum2);
}
No.1ベストアンサー
- 回答日時:
前半のforの中でgn[j]の値を書き換えている(-1を代入)ので、
後半のforの中のsum1,sum2を計算するif文の条件が満たされていないのではないでしょか?
こういう場合は、以下の確認をしてみると良いと思います。
1. sum1の計算の前にprintf("sum計算\n")を追加して、if文の条件が満たされているか("sum計算"が表示されるか)を確認
2.満たされていない場合は、ifの条件で使用している変数をifの前でprintfして、どの値が変なのか確認。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 宇宙科学・天文学・天気 仙台で積雪量が増えたのに降雪量や天気概況には雪が降らなかった観測結果が出ることが最近多くなっている。 1 2023/02/01 19:16
- C言語・C++・C# C言語階乗の総和を求める 2 2023/03/04 23:31
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Visual Basic(VBA) 今日の日付が過ぎたらその行を削除したい 1 2023/04/01 20:06
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
- WordPress(ワードプレス) wordpressでphpを読み込みたい 1 2022/10/30 23:40
- C言語・C++・C# このプログラミングの問題を教えてほしいです。 キーボードからデータ数nとn個のデータを入力し、平均値 3 2022/12/19 22:51
- C言語・C++・C# C言語 3 2022/10/04 15:07
- 英語 "this day"が当日か今日を表すのかの使い分け方等について 5 2023/08/08 14:29
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語 exitの使い方
-
Access2003 オートナンバーの現...
-
UWSCのcallについて
-
フォームを開くときに、コンボ...
-
数字の位ごとの値を表示するプ...
-
Excel-vba 文字列と変数を...
-
VBAのチェックボックス結果を集...
-
VB6.0-整数と余りを求める
-
CGIのPerlの変数をJavaScrip...
-
バッチファイルで正規表現を使...
-
VBAで配列のNULL判定
-
VBAの定数の使い方で、計算値を...
-
相関係数p値の出し方
-
DWORDって
-
DataGridView 複数行同時変更...
-
足して100になるような乱数のア...
-
c言語で乱数を扱うときの
-
何種類の値があるかを調べる方...
-
計算機イプシロン
-
フリーランタイマーの時間差分...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語 exitの使い方
-
フォームを開くときに、コンボ...
-
Excel-vba 文字列と変数を...
-
数字の位ごとの値を表示するプ...
-
VB6.0-整数と余りを求める
-
VBAで配列のNULL判定
-
足して100になるような乱数のア...
-
フリーランタイマーの時間差分...
-
DataGridView 複数行同時変更...
-
相関係数p値の出し方
-
世界のナベアツ
-
10進数をアスキーコードに変換
-
C#で動的にコントロールを取得...
-
ラジオボタンの値の取得につい...
-
DWORDって
-
バッチファイルで正規表現を使...
-
4択問題のプログラムでランダム...
-
1つ前の値を変数に保存する方法
-
VBAの定数の使い方で、計算値を...
-
コンボボックスの名前を変数に...
おすすめ情報