C#で台形の面積を求めるプログラムを作成しています。
プログラムの手順としては、
①台形の面積を求めたいことを宣言する。
②テキストファイルのファイル名を入力してもらう。
③入力されたテキストファイルを読み込む。(テキストファイルには上底、下底、高さの数値が記入されている。
④テキストファイルの数値を式に代入し台形の面積を求める。
という流れになっています。
①②③はできたのですが、④の操作をどうすればよいかわかりません。
いろいろ調べてはみたのですが、よくわかりませんでした。
④の操作をどうすればよいか教えてください。
自分なりに作ったプログラムは下記の通りです。
よろしくお願いします。
using System;
using System.IO;
class Test
{
public static void Main()
{
try
{
//台形の面積を求めたいことを宣言する
Console.WriteLine("台形の面積Sを計算します。");
Console.ReadLine();
//読み込みたいファイル名を入力してもらう。
//テキストファイルには上底、下底、高さの数値が入力されている。
Console.Write("読み込むファイル名を入力してください。(拡張子も含む)→");
var str = Console.ReadLine();
string filePath = Path.GetFileName(str);
Console.WriteLine(filePath);
Console.ReadKey();
//ファイルを読み込む
using (StreamReader sr = new StreamReader(str))
{
string line;
while ((line = sr.ReadLine()) != null)
{
Console.WriteLine(line);
}
}
Console.Read();
}
catch (Exception e)
{
Console.WriteLine("ファイルを読み取れませんでした:");
Console.WriteLine(e.Message);
Console.Read();
//読み込んだテキストファイルの上底、下底、高さの数値から台形の面積を求める。
Console.Write("台形の面積Sは");
}
}
}
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
○どの変数が、ある時点で、何を記憶しているか、を整理しましょう。
例えば、 変数line は Readline()でファイルから1行読み込んだものを記憶しています。
ですが、ループで同じ変数を使い回しているので、2行目を読み込んでしまったら、1行目の内容は忘れてしまいます。
各行から後で使うための値を取得するなら、次のいずれかの方法を使う必要があります
・次のReadLine() より前に、現在の行の文字列から数値を取り出し記録する。
・別の変数(配列、List等を含む)に読み出した全てを記憶させ、後で各数値を取り出す
○ double.Parse(string s) に指定する文字列 s は、「数値を表現した文字列」である必要があります。
現在テキストファイル読み込んだ文字列は、1行全て、つまり「上底=2」等となっています。
これは「上底=」という余計な文字列が付いているので、「数値を表現した文字列」ではありません。
よって、Parseはエラー(例外)になります。
Parseする前に、数字の部分だけ抜き出す必要があります。
方法はいくつかあります。
・ "=" を探して、それ以降をSubStringで取り出す
・数字を抜き出すような正規表現を使う
・"=" で Split して数字の部分を使う
初心者向け入門書の課題のようなプログラム内容と、文字列から数字の部分を抜き出すというやや高度な操作とが、ちぐはぐな気がします。
テキストファイルの内容は、本当にそれであっているのですか?
テキストファイルには
2
3
4
とだけ書いてあって、
それを
・文字列変数line読み込んで
・double a = double.Parse(line) 等と数値にして
・確認用に Console.WriteLine("上底=" + a.ToString()) ; みたいに出力する
ということなのでは?
No.3
- 回答日時:
もっと具体的に書いてほしいんだけどなぁ.... 例えば「うまくいきませんでした」というのは, なにがどうなって「うまくいきませんでした」と判断した? 「うまくいかない」ときにどうなるか, ちゃんと理解してから使ってる?
あと「すべてを一気に読み取る」ってどういうこと? ReadLine でそれだけ全部読み込んだってこと?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel VBAが徐々に遅くなる
-
ATTファイルってどうやって開け...
-
テキストファイルの特定行の削...
-
テキストファイルの一部分を抽...
-
VB(VBA)で、バイナリデータを使...
-
Excel+VBAでフランス語を扱いた...
-
エクセルVBAでメールの自動作成...
-
テキストファイル(英語&日本...
-
CList, CArchive, CFileの組み...
-
テキストファイル内容の、16進...
-
ASPでiniファイルの読み書きを行う
-
既存のテキストファイルを開く方法
-
ExcelのVBAコードについて教え...
-
テキストファイルの開き方について
-
VBA。開いているテキストファイ...
-
テキストファイル内の文字の有...
-
UTF-8とASCIIコードにおける互...
-
accessでクエリをExcelにエクス...
-
CSVファイルの時刻の形式について
-
【Excel VBA】取り込んだファイ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ATTファイルってどうやって開け...
-
テキストファイルの一部分を抽...
-
Excel VBAが徐々に遅くなる
-
VB(VBA)で、バイナリデータを使...
-
テキストファイルの特定行の削...
-
ファイル変換
-
ファイルのチェックサムを改行...
-
研究する文献がたくさんありま...
-
StreamReaderで読み込んだファ...
-
既存のテキストファイルを開く方法
-
ストリームについて。
-
エクセルVBAでメールの自動作成...
-
テキストファイルをiCalendar形...
-
テキストファイル固定長データ...
-
テキストファイル内容の、16進...
-
UTF-8とASCIIコードにおける互...
-
VBSでテキストファイルの2行目...
-
C言語のソースからコメントを抜...
-
別のサーバーのテキストファイ...
-
Zbarというソフトについて
おすすめ情報
文字列を数字に変換しようと思いいろいろ試しましたがよくわかりませんでした。
double d = double.Parse(str);
Console.WriteLine(d);
Console.ReadKey();
Console.Write("台形の面積Sは");
double S;
S = (d + d) * d / 2.0;
Console.WriteLine(S);
Console.ReadLine();
double型に変換したいと思い、上記のようなプログラムを追加しましたがうまくいきませんでした。
また、読み取るテキストファイルには、上から、
上底=2
下底=3
高さ=4
と書いてあります。
テキストファイルは、
上底=2
下底=3
高さ=4
のすべてを一気に読み取るのですが、それも問題なのでしょうか?
ファイルを一気に読み取るというのは、テキストファイル名を入力するとテキストファイルに書いてある文を全て読み取ります。
また、追加プログラムを加えてやると結果が面が画像のようになります。
kmeeさんの言う通りです。
テキストファイルには
2
3
4
とだけ書いてあって、
それを
文字列変数line読み込んで、
double a = double.Parse(line) 等と数値にして台形の面積を計算するプログラムを作成したいです。
・次のReadLine() より前に、現在の行の文字列から数値を取り出し記録する。
・別の変数(配列、List等を含む)に読み出した全てを記憶させ、後で各数値を取り出す。というのはどうすれば良いでしょうか?