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

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

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

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

Q&A

解決済

3回答

9194閲覧

C++でテキストファイルを読み込んで、数値を振り分けたい

do_Shiro_to

総合スコア15

C++

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

0グッド

1クリップ

投稿2019/06/29 23:20

前提・実現したいこと

ど素人の質問ですみません。
”sample.text"
5
9
-19
-4
4
89
-1
このようなテキストファイルを読み込んで、それぞれの数値を正数・負数に振り分け、正数の数・合計値、負数の数・合計数を表示するプログラムを作りたいです。

理想の結果としては、
正数:4
正合計:107
負数:3
負合計:-24

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

ファイルの読み込みができないし、できたとしてもどうやって数列を分割して振り分けて格納すればいいのかわかりません。

該当のソースコード

C++

1#include <iostream> 2#include <fstream> 3#include <string> 4using namespace std; 5 6int main() 7{ 8 9 ifstream file; 10 string num; 11 12 file.open("Sample.txt"); 13 14 if (file.fail()) 15 { 16 cout << "fail" << endl; 17 return -1; 18 } 19 20 string str; 21 while (getline(file, str)) { 22 file >> str; 23 cout << str << endl; 24 } 25 26 27 file.close(); 28 return 0; 29} 30 31//実行結果:fail

試したこと

ネット上にあるいろんなサンプルコードを組み合わせてなんとかエラー表示をしない程度にはまとめれたんですが、ファイルが開けません。
ifstream file(“Sample.txt”);
みたいなコードも試してみたんですが、そうするとSampleが定義されてません、といわれそもそも実行できません。

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

だれか助けてください。

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

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

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

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

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

guest

回答3

0

フォルダなら分かりますか?
ディレクトリはフォルダのことだと思ってください。
ファイルはフォルダの中にあります。
フォルダは別のフォルダの中にあります。
これを階層ファイルシステムといいます。
Windows なら、一番上が Cドライブで、これを C: で表します。
"C:/Users/Shiro/source/repos/Project3/.../sample.txt"
のようにフォルダを並べて書くのを絶対パス名といいます。
"sample.txt" や "data/tmp/sample.txt" や "../../data/sample.txt"
のようなものを相対パス名といい、カレントディレクトリ(現在注目している
フォルダ)の中のファイル、下のファイル、上のファイルを参照します。
Visua Studio ではなく、エクスプローラーを使って、
ファイルの削除や移動やコピーができますか?

追記

すみません。
コメントを書いたつもりが回答になってしまいました。

投稿2019/06/30 08:34

編集2019/06/30 08:36
kazuma-s

総合スコア8224

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

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

do_Shiro_to

2019/07/02 06:40

わかりやすく解説してくれてありがとうございます!!
kazuma-s

2019/07/02 07:33

そのようにして問題を解決したかを書いてください。 sample.text の置き場所を変えたのか。 プログラム中に絶対パスを書いたのか。
guest

0

ベストアンサー

ファイルがオープンできないのはファイルの置き場所が問題であることが多い
ので、まずそれを確認してください。

Windows の Visual Studio のような IDE(統合開発環境) を使っている場合
ソースファイルの場所、実行ファイルの場所、プロジェクトの場所が異なります。
sample.text の置き場所を変更するか、あるいは、"sample.text" を
"c:/user/hoge/.../sample.text" などのように絶対パスにしてみるなどを
試してみてください。

追記

Linux では、ファイル名の大文字と小文字は区別されます。
sample.text と Sample.text は異なるファイルです。
ファイルの拡張子が .text か、.txt かにも注意してください。

投稿2019/06/30 00:30

編集2019/06/30 00:38
kazuma-s

総合スコア8224

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

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

do_Shiro_to

2019/06/30 01:09

Visual Studio を使っているのですが、ファイルってどうやってリソースに追加するんでしょうか…??Open fileでtxtファイルをcppファイルのとなりに置いたんですけど、明らかに間違ってますよね…
episteme

2019/06/30 01:59

F5/ctrl-F5で実行してるなら、ファイルはプロジェクト・ディレクトリに置け。
yumetodo

2019/06/30 02:41

普通.vcxprojファイルと同じdirectoryが実行時のカレントディレクトリ。
do_Shiro_to

2019/06/30 05:07

プログラム始めてまだ一週間の本当にど素人でして… ディレクトリっていうのはどれのことでしょうか??検索してもファイルのようなものだということ以外よくわからず… お手数ですが、もう少しわかりやすく解説してくださると助かります。
guest

0

C++

1#include <iostream> 2#include <fstream> 3#include <string> 4 5int main() { 6 using namespace std; 7 8 ifstream file("sample.txt"); 9 10 if ( !file.is_open() ) { 11 cout << "fail" << endl; 12 return -1; 13 } 14 15 int positive_count = 0; 16 int negative_count = 0; 17 18 int positive_sum = 0; 19 int negative_sum = 0; 20 21 22 int num; 23 while ( file >> num ) { 24 if ( num > 0 ) { 25 ++positive_count; 26 positive_sum += num; 27 } else if ( num < 0 ) { 28 ++negative_count; 29 negative_sum += num; 30 } 31 } 32 33 cout << "positive: count = " << positive_count << " sum = " << positive_sum << endl; 34 cout << "negative: count = " << negative_count << " sum = " << negative_sum << endl; 35}

投稿2019/06/29 23:32

episteme

総合スコア16614

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

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

do_Shiro_to

2019/06/30 05:12

なんとなく考え方は理解できました! ありがとうございます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問