アプリ版:「スタンプのみでお礼する」機能のリリースについて

main関数内で使用する変数にtxtファイルから値を読み取り、それを代入する方法を探しております。

以下のようなシステムを製作したいと考えております。

(1)main内で定義した変数 int abc,bcd,cde;
(2)hoge.txtの内容が
/* txtファイルの中 */
abc 100
bcd 150
cde 200
/* --------------- */ というように記述
(3)mainでhoge.txt内の文字列"abc"を検索し、その後ろにある値100をabcに代入。次に"bcd"を検索し・・・というふうに値を代入していきたいと考えております。


まだ、C言語入門者なので説明不足な点もあるかと思いますが、よろしくお願いします。

A 回答 (4件)

既に回答が出ているように、文字列を直接変数名にすることは原則としてできません。

しかし、CINTのようなインタープリタ方式の処理系を使えば、それも可能かと思います。
    • good
    • 0
この回答へのお礼

皆様の助言どおりに、さきほどプログラムを作成したところ上手くいきました。ありがとうございました!!

お礼日時:2006/10/20 01:41

> /* txtファイルの中 */



ですが、C言語のコメントと同様に扱えばよいのでしょうか?
その場合、文字コードは何でしょうか?

> mainでhoge.txt内の文字列"abc"を検索し

これは、コメント内に"abc"があっても、無視するのですよね?

この回答への補足

コメントありがとうございます。

申し訳ありません。コメントアウト部分の/**/は、実際のテキスト内にはありません。今回、テキストの中身の場所を示すために目印として使用しましたが、逆にわかりにくくなってしまいましたね。

ということで、hoge.txtの中身は、変数名とその値のみしか存在しないように設定したいと考えております。

例)

abc 100
bcd 150
cde 200

補足日時:2006/10/19 16:44
    • good
    • 0

FILE *fp;


char line[256];
int abc,bcd,cde;
char *token;
int n;

fp = fopen("data.txt","r");
while(fgets(line,256,fp) != NULL) {
 token = strtok(line," \n");
 n = atoi(strtok(NULL," \n");
 if(strcmp(token,"abc") == 0) {
  abc = n;
 } else if(strcmp(token,"bcd") == 0) {
  bcd = n;
 } else if(strcmp(token,"cde") == 0) {
  cde = n;
 }
}
fclose(fp);

エラー処理とか何も考えないで書いた。
文字列を直接変数名にするのは出来ないはず。

この回答への補足

コメントありがとうございます。
なるほど、文字列を直接変数名にするのは無理ですか。

Trick--o-- 様のプログラムを拝借させていただき、後ほどテストしてみようと思います。

補足日時:2006/10/19 16:52
    • good
    • 0
この回答へのお礼

皆様の助言どおりに、さきほどプログラムを作成したところ上手くいきました。ありがとうございました!!

お礼日時:2006/10/20 01:41

単純には、


fscanf (か、fgets とsscanf)で、文字列と数値を一行毎読み取り
文字列部分をstrcmp なんかで検索する文字列と一致するか調べて、代入するというような感じでイイと思います。

この回答への補足

早速のコメントありがとうございます。

Trick--o-- 様のプログラムを参考にBLUEPIXY様がおっしゃるような感じでプログラムを作成してみます。その際また問題点が出てきましたら、相談に乗っていただけるとありがたいです。

補足日時:2006/10/19 16:57
    • good
    • 0
この回答へのお礼

皆様の助言どおりに、さきほどプログラムを作成したところ上手くいきました。ありがとうございました!!

お礼日時:2006/10/20 01:40

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!