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

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

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

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Q&A

解決済

2回答

1002閲覧

ファイルからデータを一行ずつ読み込みたいのですができません。

yamas

総合スコア8

C

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

0グッド

0クリップ

投稿2018/01/02 17:37

編集2018/01/03 10:42

メモ帳からデータを一行ずつ読み込むプログラムを書籍から写して実行してみたのですができません。私はvisual studioを用いて実行しようとしました。
特にエラーも出ず、作ったはずのファイル名を入力してもオープンできませんと実行されてしまいます。これはどこが問題なのでしょうか分かる方がいたら教えていただけるとうれしいです。説明不足なのは重々承知ですが初心者のためどう言えば良いのか分かりません。よろしくお願いします。
ちなみに私が参考にした書籍は「新C言語入門 スーパービギナー編」p161です。

C言語

1コード 2#include<stdio.h> 3#include<stdlib.h> 4 5int main(void) 6{ 7 FILE *fin; 8 char buf[256]; 9 char filename1[80]; 10 11 printf("入力ファイル名="); 12 gets(filename1); 13 14 fin = fopen(filename1, "r"); 15 if (fin == NULL) { 16 printf("%sをオープンできません\n", filename1); 17 exit(1); 18 } 19 20 while (fgets(buf, 256, fin) != NULL) { 21 printf("%s", buf); 22 } 23 24 fclose(fin); 25 return 0; 26}

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

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

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

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

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

aglkjggg

2018/01/02 18:01 編集

①コンソールに「入力ファイル名=」と表示された後に何と入力しましたか?また、絶対パスを入れても「~をオープンできません。」と表示されますか?②VisualStudioのバージョンも明記して下さい。③printf("%s, buf");ではなく、printf("%s", buf);の間違いかと思います。
yamas

2018/01/02 18:09

回答ありがとうございます。①「入力ファイル名=」と表示された後メモ帳のファイル名を「smp1.txt」としていたので「smp1.txt」(カギ括弧はなしです)と入力しました。また、絶対パス(shiftを押しながら右クリックででた「パスのコピー」を押し入手)を入れても同じ結果でした。②バージョンを確認したらMicrosoft Visual Studio Community2017 Version 15.2(26430.16)となっていました。③ありがとうございます。間違っていたので訂正しました。 よろしくお願いします。
aglkjggg

2018/01/02 18:26

ファイルに対してShiftを押しながら右クリックをして「パスのコピー」をクリックすると「"」も含まれるので、「"」は取り除いて下さい。私の環境では問題なく動作しました。https://i.imgur.com/a8TaAvd.png
yamas

2018/01/03 10:38

ありがとうございます。「”」を取り除いたら表示することができました! 無事表示できたのですが参考書では C:\cwork>type [改行] 入力ファイル名=smp1.txt と入力することでできていたのですがこれは使っているソフトが違うからできないのでしょうか? よろしくお願いします。
aglkjggg

2018/01/03 10:45 編集

VisualStudioでコンパイルすると通常はソリューションディレクトリにDebugまたはReleaseディレクトリが作成され、その中にexeが生成されます。そのexeと同じディレクトリにsmp1.txtが入っていれば「smp1.txt」と指定するだけで希望の結果を得ることが出来ます。相対パス、絶対パスについて調べてみて下さい。
yamas

2018/01/03 11:03

ありがとうございます。知識不足で単語が分からないのですが頑張って調べてみます。また、相対パス、絶対パスについても調べさせてもらいます。色々とありがとうございました。 是非ベストアンサーに選ばせていただきたいのですが回答でないからか「ベストアンサーにする」の表示が出ません。もしよろしければ回答の方にも一言もらうことはできますか?
aglkjggg

2018/01/03 11:10

評価は気にしませんので、お手数ですが自己解決として解決方法を投稿して締めくくって頂ければと思います。
yamas

2018/01/07 05:58

すみません。今回は自己解決を書くに当たって悩んでいた箇所を他の回答者の方々が回答して下さり、理解ができたためそちらの方をベストアンサーにさせてもらうことにしました。ごめんなさい。ありがとうございました。
guest

回答2

0

ベストアンサー

ファイル名を入力間違いしていないのなら、プログラムが見ているフォルダとファイルが置いてあるフォルダが違う、という症状でしょう。試しにファイルをc:\に置いてみて、 C:\ファイル名 と入力したらどうなりますか?

投稿2018/01/03 05:07

a_saitoh

総合スコア702

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

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

yamas

2018/01/03 10:50

回答ありがとうございます。 言われたとおりしたところ実行できました。 ファイル名だけでは実行できないのでしょうか?
fdaskjlfda

2018/01/04 07:57

相対パスと絶対パスでググってみるといいと思います。 相対パスは、自分(プログラム)がある場所から見たファイルの場所です。 例えば、一つ上のフォルダの**というフォルダにA.txtというファイルが入っている、みたいな。 ..**\A.txt みたいなのが、相対パスです。 C言語の場合、\nのようなエスケープシーケンスがあるので、\の代わりに/を使うか\にしないといけません。 絶対パスは、このドライブの中のこのフォルダの中のこのフォルダの中の...このファイルみたいな感じです。 例えば、 C:\Users***\Documents\Visual Studio 2017\test.txt こういうものが絶対パスになります。
a_saitoh

2018/01/04 14:04

Windowsには「プログラムごとのカレントディレクトリ」(現在のディレクトリ(フォルダ))という概念があります。ディレクトリ(フォルダ)指定なしにファイル名だけでオープンしようとすると、カレントディレクトリを探します。 コマンドプロンプトからコマンドラインでコンパイル・実行している場合は、起動したプログラムにとってもそこがカレントディレクトリになるので,ソースを置いた場所にデータファイルも置いておけばOKです。 VisualStudioなど統合開発環境では、ソースを置いた場所とは違う場所をカレントディレクトリとしてビルドで出来たプログラムが起動され(るものがあり)ます。 出来た  なんとか.exe をソースプログラムがあるフォルダにコピーしてそっちで(ダブルクリックして)起動したら、絶対パスで指定しなくてもいけるかもしれません。
okrt

2018/01/04 15:57

一般論としては、「自分(実行ファイル)のある場所」と「相対パスの基準になる場所(カレントディレクトリ、カレントフォルダ)」が一致しているとは限りません。 一致していない例としては https://okwave.jp/qa/q7884711.html の回答No.2や4 http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=36173&forum=7 あたりを読むと良いかもしれません。 VisualStudioから実行した場合はおそらくデフォルトで「自分(exeファイル)のある場所」と「相対パスの基準になる場所の初期値」が一致していて、「自分(exeファイル)のある場所」と「ソースファイルのある場所」は異なっているでしょう。
Zuishin

2018/01/05 02:27

Explorer を使った場合は基本的に開いているフォルダがカレントディレクトリになります。 ですから開いたフォルダで exe を見つけてダブルクリックした場合には exe の位置とカレントディレクトリが一致します。 しかしこれは Explorer の仕様でしかありません。 例えば「ファイル名を指定して実行」やコマンドプロンプトからの実行では別のカレントディレクトリから path を通してある exe を実行してもカレントディレクトリは変わりません。
a_saitoh

2018/01/05 02:29

『ダブルクリック』といってるのだから、エクスプローラーで開いているフォルダ、のことのつもりなのですが。。。
Zuishin

2018/01/05 02:39

反論ではありません。 実行ファイルを移動することでカレントディレクトリを変える方法を紹介されているので、それを読んで誤解する人が出ないように補足しました。 よく読めば誤解するはずはないのですが、手順以外読み飛ばす人もいます。
a_saitoh

2018/01/05 06:14

完全に余談ですが「getsは練習プログラミング以外で使っちゃダメ」を書き忘れました。
yamas

2018/01/07 05:59

参考サイトなどもすべて読ませてもらいました。おかげさまで今までのもやもやも一気に解決できました。色々と考えてこの回答をベストアンサーとさせていただきます。皆さんわかりやすい回答ありがとうございました。
guest

0

おそらく printf("%s, buf"); の部分に問題が有るのではないでしょうか?

printf("%s", buf);にするとか。

投稿2018/01/02 22:44

A.Ichi

総合スコア4070

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

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

yamas

2018/01/03 10:47

問題部分の指摘ありがとうございます。 そこの部分を修正したのですがうまくいきませんでした。 しかし、その箇所の修正と他の回答者の方からの指摘で無事表示できました。 回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問