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

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

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

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

ファイル

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

Q&A

解決済

2回答

20832閲覧

C言語でscanfでファイル名を指定する

Ruizin

総合スコア12

C

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

ファイル

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

0グッド

0クリップ

投稿2018/06/01 04:36

前提・実現したいこと

Cでテキストファイルをscanfで指定して、そのファイルの中身を別のファイルに移そうと思っています。

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

エラーメッセージ自体は出ていないのですが、scanfでファイル名を書き込んでも次の動作に移行せず止まってしまいます。そのあとに適当な文字を打ち込むと何故か次の動作に移って実行してくれる状況です。

ー実行ー

kpra.exe

読み込むファイル名を指定してください。:test.txt
a   ←ここに何か打ち込まないと動かいない
test.txtの内容をrev.txtに書き込みます。
ウアオ
イアエ

アウ

該当のソースコード

C
ソースコード

include <stdio.h>
include <stdlib.h>
include <string.h>

int main() {
//ファイル構造体へのポインタを宣言
FILE *fr, *fw;
char str[256], filename[256];

//読み込むファイルを開く printf("読み込むファイル名を指定してください。:"); scanf("%s\n", filename); fr = fopen(filename,"r"); //ファイルが開けなかったとき if(fr==NULL) { //失敗を表示して終了 printf("ファイルを開けませんでした\n"); return -1; } //読み込ませるファイルを開く fw = fopen("rev.txt","w"); //ファイルが開けなかったとき if(fw==NULL){ //失敗を表示して終了 printf("ファイルを開けませんでした\n"); return -1; } printf("%sの内容をrev.txtに書き込みます。\n", filename); //ファイルへの書き込み while(fgets(str, 256, fr)){ printf("%s", str); fputs(str, fw); } fclose(fw); fclose(fr); return 0;

}

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

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答2

0

そもそも、scanf という関数はある意味危険な関数なんで、
#入力間違えると帰ってこなくなったり、バッファオーバフローの危険あったり

こういうところは、fgets 使いましょう

投稿2018/06/01 04:44

y_waiwai

総合スコア87774

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

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

0

ベストアンサー

C

1) 2scanf("%s\n", filename); 3) 4scanf("%s", filename);

scanfの使い方を間違えています。

投稿2018/06/01 04:40

kazto

総合スコア7196

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

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

Ruizin

2018/06/01 04:43

ありがとうございます。 基本中の基本を忘れていました・・・・。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問