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

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

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

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

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

3回答

280閲覧

[急募]c言語のファイルに関する問題を

back6002

総合スコア9

C

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

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2018/02/15 00:33

編集2018/02/15 01:06

至急解かねばならない問題があり質問させていただきます。
C言語初心者です。MVSを使用してⅭ言語の勉強をしております。

5回の入力後にファイルへデータ書き込んだら、画面上に「繰り返し入力しますか? Y/N」と表示する。
「Y」が選択(入力)された場合は、上記処理を繰り返し、ファイルへ追加して格納する。
「N」が選択された場合は終了する。

という問題の一部なのですが、ここの処理の仕方が分かりません。

発生している問題

・5回入力後にファイルにデータを書き込む方法
・Yを入力後に、処理をくりかえす方法とそれをファイルに追加する方法
を知りたいです。

該当のソースコード

#include "stdafx.h" #include <stdio.h> #include <string.h> #include<math.h> #include <stdlib.h> #define _AFX_SECURE_NO_WARNINGS #define KAISU 5 #pragma warning(disable:4996) int main(void) { int i = 0, j = 0; char houhou; float num[100]; float sum = 0, sum2 = 0, avg, dev; /* 入力した文字列を格納 */ char ch[100]; /* ファイルポインタ */ FILE *fp; printf("\n5回数値を入力してくださ \n"); for (i = 0; i < KAISU; i++) { printf("%d個目 = ", i + 1); scanf_s("%f", &num[i]); //計算  sum += num[i]; sum2 += num[i] * num[i]; avg = sum / KAISU; dev = sqrt(sum2 / KAISU - avg*avg); if (num[i] >= 1000) { printf("1000未満の値を入力してください\n"); } } printf("繰り返し入力しますか? Y/N"); scanf_s("%f", &num[i]); if (num[i] == 'Y') { printf("上記処理をくりかえします。\n"); /* ファイルを書き込みモードでオープン */ fp = fopen("statistics.csv", "w"); /* ファイルが適切に読み込まれているかを確認 */ if (fp == NULL) { perror("ファイルの読み込みに失敗!\n"); return 1; } /* 入力した文字列をファイルに書き込む */ fprintf(fp, "%s", num[i]); fclose(fp); return 0; } else if (num[i] == 'N') { printf("処理を終了します。\n"); } switch (houhou = 0) { case 'Y': num[i] = num[i] + 'Y'; break; case 'N': num[i] = num[i] + 'N'; break; default: printf("該当しません"); } printf("数値の合計 = %.2f\n", sum); printf("数値の平均値 = %.2f\n", avg); printf("数値の標準偏差 = %.2f\n", dev); return 0; }

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

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

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

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

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

guest

回答3

0

5回の入力後にファイルへデータ書き込んだら、画面上に「繰り返し入力しますか? Y/N」と表示する。

「Y」が選択(入力)された場合は、上記処理を繰り返し、ファイルへ追加して格納する。
「N」が選択された場合は終了する。

C

1 /* 疑似コード */ 2 do { 3 - 5回入力する 4 - ファイルに書く 5 -「繰り返し入力しますか? Y/N」と表示する 6 - ユーザ入力(選択肢:Y/N)を手に入れる 7 } while ( Yが選択された );

投稿2018/02/15 00:47

編集2018/02/15 01:41
episteme

総合スコア16614

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

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

back6002

2018/02/15 01:04

やってみます。 ありがとうございました。
episteme

2018/02/15 02:27 編集

ところでこのままだとYでないいかなる文字に対しても終了するから注意。 ユーザ入力が Y/N 以外なら再度「繰り返し入力しますか?」しないとね。
back6002

2018/02/15 04:00

ありがとうございます。 なんとかできました。 本当にありがとうございます。
episteme

2018/02/15 05:07

「こんなんできましたー♪」なコードを質問の末尾に追記してくれるとうれしいなァ...
guest

0

ベストアンサー

上から順におかしいところ。
1000未満の値をはじきたいならば、判定しているところが遅いです。
計算の前にしなくては意味がありません。

繰り返し入力しますか?の受付がおかしい。(scanf_sの引数両方とも。これだとダメなような気がする。未確認)

最初の入力内容をファイル書き込みについて、
繰り返しますかでNを選ぶと書き込まないけれどいいのですか?
Yを選ぶとファイル開いて最初の入力内容を書き込んで終わってしまうのはおかしくないですか。

唐突に表れたswitchのhouhouという変数
何がしたいのが意味不明(というか、これコンパイル通るのかしら?)
通ったとしても、全部defaultに流れるだけです。

最後に結果を表示しているが、これファイルに書き込まなくていいのですか?

さて問いについて。
ファイル書き込み部分の繰り返しについては、
epistemeさんが最低限の回答をしているので書くことがなかった・・・が、ひねりのない別答を提示します

C

1入力値=Yで初期化 2while(入力値==Yならば継続) 3{ 45回入力のループ 5 ・ファイル書き込み処理 6 ・繰り返しますか?の判定 7  if(入力値==N)ならば、whileから抜ける(break) 8}

ファイルは追記したいようなので、ファイルを開くときは生成と追記モードで開いてください。
開いた後ファイルポインタは進めること。fseekを調べて下さい。

投稿2018/02/15 02:12

編集2018/02/15 02:38
ardin

総合スコア544

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

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

back6002

2018/02/15 04:01

できました! ありがとうございました!
guest

0

ファイルへの追記は "w" ではなく "a" を指定すればできます。
繰り返し処理は for や while を使えば実現できます。

投稿2018/02/15 00:49

HiroshiWatanabe

総合スコア2160

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

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

back6002

2018/02/15 01:04

ありがとうございます! ファイルいけました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問