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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
WAITOHUZIN

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

#1

投稿記事 by WAITOHUZIN » 9年前

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

コード:

#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

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

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

#2

投稿記事 by みけCAT » 9年前

11行目でmain関数の初期化されていない自動変数bの値が使用されているため、undefined behaviorとなります。
bの値を使用する前に初期化(何らかの意味のある値を代入)してください。
また、インデントも整えた方がいいでしょう。
ちなみに、C言語では関数の引数は値渡しされるため、呼び出される側で仮引数を書き換えても、呼び出し元の実引数やローカル変数には全く影響を与えません。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
amehirune
記事: 181
登録日時: 11年前
住所: どっか
連絡を取る:

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

#3

投稿記事 by amehirune » 9年前

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

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

こちらにいい感じのブログが見つかりました。
ポインタのお話~スコープって何?
ほら、来いよ!! 誤字や矛盾を指摘したい奴から、前に出てこいよぉおおおおおおおッ!!!
※都合により、不定期でしか現れません。即返などはできませんのでご了承ください※

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

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

#4

投稿記事 by みけCAT » 9年前

WAITOHUZIN さんが書きました:それを変数名で宣言してあるファイルに代入し
すいません、意味がよくわかりません。
どういうことでしょうか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

WAITOHUZIN

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

#5

投稿記事 by WAITOHUZIN » 9年前

返信ありがとうございます。
初期化ができてなかったんですね。。。 本当にありがとうございました


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

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

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

閉鎖

“C言語何でも質問掲示板” へ戻る