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

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

ただいまの
回答率

90.48%

  • C

    4641questions

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

C言語 練習問題について

受付中

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 177

yyouy

score 0

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

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

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

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

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

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

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

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

C言語ソースコード

ifdef _MSC_VER

define _CRT_SECURE_NO_WARNINGS

endif

//defineマクロを使ってデータ入力ファイルパスの定義

define IN_FILE_PATH "D:/

//defineマクロを使ってデータ出力ファイルパスの定義

define OUT_FILE_PATH "D:/

//defineマクロを使って入力ファイルオープンエラーの定義

define IN_FILE_OPEN_ERROR -1

//defineマクロを使って入力ファイルオープンエラーの定義

define OUT_FILE_OPEN_ERROR -2

//defineマクロを使って戻り値の定義

define SUCCESS 0

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/ツールのバージョンなど)

visualstudioで作成しています

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • C_program

    2019/06/13 14:27

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

    キャンセル

回答 2

+10

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

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

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

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

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

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

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

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

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

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

同じタグがついた質問を見る

  • C

    4641questions

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