ページ 11

ファイルを読み込めません

Posted: 2016年5月08日(日) 17:39
by WAITOHUZIN
こんにちは 初めての質問です
私は今 [ 文字を打つとその文字に対応したファイルを読み取りそれを表示する]というプログラムを作っております。*ファイルはあらかじめつくってあります
詳しく説明させてもらいますと
近畿地方の県名を入力するとその県名を数字に変換しそれを変数名で宣言してあるファイルに代入しファイルをよみとり表示するというプログラムです
自分なりにプログラムを考え作ってみたのですがどうしてもファイルを読み取ってくれないのです

コード:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 256
int sum(int b);
int main (void) {
FILE *fp;
char filename[100];
int b;
sum(b);
sprintf(filename,"%d.txt",b);
char readline[N] = {'\0'};
if((fp=fopen(filename, "r")) == NULL) {
printf("not open\n");
exit(1);
}
while ( fgets(readline, N,fp) !=NULL) {
printf("%s",readline);
}
fclose(fp);
return (0);
}

int sum (int b) {
char i[100];
printf("県を入力してください\n");
scanf("%s",i);
if(strcmp(i,"siga")==0){
b=1;
}
else if(strcmp(i,"nara")==0){
b=2;
}
else if(strcmp(i,"wakayama")==0){
b=3;
}
else if(strcmp(i,"osaka")==0){
b=4;
}
else if(strcmp(i,"kyoto")==0){
b=5;
}
else if(strcmp(i,"hiyogo")==0){
b=6;
}
else{
printf("gomen\n");
}
return(b);
}


エラーはでないのですがファイルを読み取ってくれません
ファイルを読みとれるようにするにはどうしたらよろしいのでしょうか? 何が間違っているかわからず困っています どうかご教授お願いします
c言語を勉強し始めてだいたい半年くらいです
使用 os Linux ubuntu 64 bit

Re: ファイルを読み込めません

Posted: 2016年5月08日(日) 17:49
by みけCAT
11行目でmain関数の初期化されていない自動変数bの値が使用されているため、undefined behaviorとなります。
bの値を使用する前に初期化(何らかの意味のある値を代入)してください。
また、インデントも整えた方がいいでしょう。
ちなみに、C言語では関数の引数は値渡しされるため、呼び出される側で仮引数を書き換えても、呼び出し元の実引数やローカル変数には全く影響を与えません。

Re: ファイルを読み込めません

Posted: 2016年5月08日(日) 17:50
by amehirune
int型変数 bの値が更新(初期化もしくは代入?)されていません。
ポインタ、というものはご存知でしょうか?
スコープ、という概念はご存知でしょうか?

簡単に解決するのであれば、10行目:b=sum(b);とすればいいでしょうが、
どうしてこうすれば治るのか、なぜ前のプログラムでは動かないのかが分からないのであれば、
この際にここで勉強していきましょう。

こちらにいい感じのブログが見つかりました。
ポインタのお話~スコープって何?

Re: ファイルを読み込めません

Posted: 2016年5月08日(日) 17:51
by みけCAT
WAITOHUZIN さんが書きました:それを変数名で宣言してあるファイルに代入し
すいません、意味がよくわかりません。
どういうことでしょうか?

Re: ファイルを読み込めません

Posted: 2016年5月08日(日) 18:44
by WAITOHUZIN
返信ありがとうございます。
初期化ができてなかったんですね。。。 本当にありがとうございました


>>みけCAT様
説明が意味不明で申し訳ございません

私は名前に変数名を含むのファイルを開きたかったんです。。。
例えば i.txtにi=5という数字を入れれば5.txtというファイルが開くような感じです。
説明下手でほんとすいません

>>amehirune様
丁寧な返信ありがとうございました
貼ってもらったブログをみてもう一度ポインタを勉強しなおしてみます