質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

2回答

441閲覧

C言語 練習問題について

yyouy

総合スコア12

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

1グッド

0クリップ

投稿2019/06/13 05:23

編集2019/06/25 12:47

C言語の練習問題で分からないところがあるので詰まっています

問題条件として
・入力ファイルinAファイル内には数値が入っており
1
2
3
4
5
6

と縦に数値が入っておりいくつ入っているかは決まっていないものとします

・出力ファイルに結果を書き込んで表示させます

・表示の条件としては、
・ファイル内の数値をそのまま表示して
・10件ごとに小計して小計出力
・入力ファイル内全部の数値を読み込んだら数値全部の合計出力と合計行数出力

出力結果イメージ
1
2
3
4
5
6
7
8
9
10
小計:
11
12
13
合計:
合計行数:

発生している問題・エラーメッセージ

今現在10件ごとの計算の所で型変換して小計を出すのが分かりません。
ソースコードを見ておかしいところがあれば教えてください

#include <stdio.h>
#include <stdlib.h>

//型 int 関数名 main 引数 void
int main(void)
{
//入力ファイルポインタ型の定義
FILE* infp;

//出力ファイルポインタの定義 FILE* outfp; //char文字列を使用してinfnameの中にファイルパスを代入 char infname[] = IN_FILE_PATH; //char文字列を使用してoutfnameの中にファイルパスを代入 char outfname[] = OUT_FILE_PATH; //char型のboffに10バイト格納エリアを定義している char boff[10]; int i = 0; double total, onesum,towsum; //合計初期値 total = 0; onesum = 0; towsum = 0; //行カウント定義 int line_cnt; //行カウント初期化 line_cnt = 0; //infp = 入力ファイルオープン(ファイルを読込モードで開く) infp = fopen(infname, "r"); //outfp = 出力ファイルオープン(ファイルを書き込みモードで開く) outfp = fopen(outfname, "w"); //入力ファイルポインタにファイルが無い場合NULLを返す if (infp == NULL) { //入力ファイルが開けないエラー表示 printf("%sファイルが開けません\n", infname); //エラー発生の場合-1を返す return IN_FILE_OPEN_ERROR; } //出力ファイルポインタにファイルが無い場合NULLを返す if (outfp == NULL) { //出力ファイルが開けないエラー表示 printf("%sファイルが開けません\n", outfname); //エラー発生の場合-2を返す return OUT_FILE_OPEN_ERROR; } //ループ処理(notNULLの条件を満たしてる場合にループ処理を続行する) //(ファイル内データをstring型で10バイトの長さを読み込んでboffに格納していく) while ((fscanf(infp,"%s", boff)) != EOF) { //読み込んだレコード行数をカウントする line_cnt = line_cnt + 1; //ファイル内データ1行の表示 printf("%s\n", boff); //inA.csvファイルデータ1行をoutfpに書き込み fprintf(outfp, "%s\n", boff); //文字列から整数型に変換 //レコード10件小計計算 //10件目の判定(ラインカウント数10件目の判定) if (line_cnt >= 10) { printf("*\n"); printf("小計%d\n",sum); //10件判定したら初期化 line_cnt = 0; } } //入力ファイル内レコード合計 total = printf("合計件数",total); //ループ処理を抜けてきたらファイルを閉じる fclose(infp); fclose(outfp); //戻り値0を返す return SUCCESS;

}

補足情報(FW/ツールのバージョンなど)

tatsu99👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

RaitoN

2019/06/13 05:27

ソースコードが読みにくいので ```C コードをここに入力 ``` と修正してください.
guest

回答2

0

まず最初の間違いは練習問題の使い方です。練習問題は自分の学習が一定のレベルにあるかどうかを計るためにあります。

つまり、答えを人に聞くのは、風邪をひいたときに他人の体温を計るのと同じです。既に解けるレベルにある人は解けるのが当たり前なので、それをもらう意味はありません。

解けなければ、解けないことがわかったということで一歩前進しました。前の段階に戻って学習を深めてください。

次の間違いは、デバッグしていないことです。誰でも間違ったコードを書くことはあります。その際にはデバッグして間違ったところを確かめ、そこを直します。それができないのではプログラミングできるとは言いません。

エラーが出るなら英語であろうが辞書を引きながらでもそれを読んでください。そしてそれをヒントに修正してください。

エラーが出ない場合、最も原始的なデバッグ方法は printf デバッグです。要所要所に変数の値を出力するコードを入れ、正しく計算されているかを確かめてください。

もう一つの間違いは、コードの扱いが雑すぎるということです。質問を見てください。見るも無残な状態です。これが気にならないようではプログラミングはできません。

投稿2019/06/13 05:32

編集2019/06/13 05:33
Zuishin

総合スコア28660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

無駄が多い。
無駄というのはコードのことではなく、質問のこと。
ご自分ができないこと・わからないことは、明確になっています。

  • 型変換がわからない
  • 小計の計算がわからない

この2点について聞けばよい。
練習問題がどうだとか、現在のソースコードがこうだとかは余計な情報です。
作ったはいいけどうまく動かない・どこがおかしいのか教えて欲しいというのなら別ですが。

型変換はatoi関数やstrtol関数で文字列から数値に変換できます。
もしくはfscanfで直接数値として読み込んでもよい。

小計は型変換した値を変数に足しこむだけですけど、何がわからないのでしょうか。
行数をカウントはできているのだから、同じ考えでやればいいだけです。

投稿2019/06/13 08:46

ttyp03

総合スコア16998

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問