前提・実現したいこと
1000行10列の実数値が入ったファイルを読み込み、一列ごとの正のデータがいくつあるか個数を計算してコンソール画面に表示する
もしわかる方いらっしゃいましたら、教えていただきたいです。
発生している問題・エラーメッセージ
ファイルを読み込むコードはかけたが、列ごとに正の数を数えてコンソール画面に表示させる方法がわかりません。
該当のソースコード
C
1 2#include<stdio.h> 3 4int main(){ 5 int i,j; 6 float x[1000][10]; 7 FILE *fp; 8 9 fp=fopen("input6_3.txt","r"); 10 for(i=0;i<1000;i++){ 11 for(j=0;j<10;j++){ 12 fscanf(fp,"%f",&x[i][j]); 13 } 14 } 15 fclose(fp); 16 17 return 0; 18}
試したこと
Googleで調べたりYahoo知恵袋を使って似たような問題を探して書き換えてみたりしました。
teratailではソースコードはMarkDownでコードブロック化してご提示ください。
```言語名←CならCと置き換える
ソースコード
```
って感じです
普通にprintf()を使えばよいですが、違いますか?
ああ、列ごとの計算が分からないのか。
でも、「各列の変数(=配列)を用意(値は0)して、正の値であれば対象を+1する」で済むと思います。
ifを使いますか?
ほぼ同じ課題。流行っているのでしょうか。
[正の数を読み込んで個数を表示したい]https://teratail.com/questions/338726
> ifを使いますか?
使います
因みにコードブロックの言語名を書くのは
```C言語
ソース
```
ではなく、
```C
ソース
```
となります。
Cだし大学の課題か何かでしょうかね・・・。
dodox86さんとfiveHundredさんのアドバイスを元にかなり解答の近いところまでできたのですが、あと一歩のところでわかりません。
#include<stdio.h>
int main(){
int i,j,y[10];
float x[1000][10];
FILE *fp;
fp=fopen("input6_3.txt","r");
for(i=0;i<1000;i++){
for(j=0;j<10;j++){
fscanf(fp,"%f",&x[i][j]);
y[j]=0;
if(x[i][j]>0){
y[j]=y[j]+1;
}
}
}
printf("%d列目の正の数は%d個",j,y[j]);
fclose(fp);
return 0;
}
こうしてみたのですが、
10行目の正の数しか表示されません。
アドバイスいただきたいです。
K_3578さん、教えていただきありがとうございます。
訂正しておきます。
https://teratail.com/questions/338726 にコタエあるやん。
「y[j]=0;」をループの中に書いてしまうと、毎回0にリセットされるので値は増えません。
また、printf()はこのままだと1回しか呼ばれないので、各列ごとに表示させる必要があります。
いずれも、個別のループを作ったほうがやりやすいです。
(ちなみにteratailでは課題の質問は非推奨なので、もしそうであれば先生に聞くのがよろしいかと思います)
epistemeさん
申し訳ございません、私の理解力では理解できない部分がありました。
fiveHundredさん
無事解決することができました。
そうだったのですね、大学の課題ですのでこれ以降は質問しないようにします。
ありがとうございました。
解決されたのなら自己解決でいいのでクローズを。
あなたの回答
tips
プレビュー