こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

関数 文字

osはlinuxコンパイラはccです。
文字列を配列で定義したものが入力したものと同じかどうか調べその単語の意味を表示するにはどうしたらいいですか?

ちなみに
char *dic[5][2] = {{"book","本"}・・・{"grape",葡萄"}}
のように英語と日本語の対応表を作成しています。
調べるときは、char型の配列c[20]にscanf("%s",&c)で入力したものを
for(i=0;i<5;i++)
{
if(dic[i][0]==d)
scanf("%s",dic[i][1]);
}
で調べています。
コンパイルしたら
subscripted value is neither array nor pointer
subscripted value is neither array nor pointer
とでました。
ずうずうしいですが
わかる方やさしい説明お願いします。

投稿日時 - 2008-12-15 23:12:35

QNo.4558929

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

このようなことがしたいのでしょうか。

#include <stdio.h>
#include <string.h>

int main(void)
{
char *dic[][2] = {
{ "book", "本" },
{ "water", "水" },
{ "telephone", "電話" },
{ "money", "お金" },
{ "grape", "葡萄" },
};
char c[20];
int n = sizeof(dic) / sizeof(dic[0]), i;

printf("意味を調べたい英単語:"), scanf("%s", c);
for (i = 0; i < n; ++i) {
if (strcmp(c, dic[i][0]) == 0) break;
}
if (i < n) printf("%sの意味は%sです。\n", c, dic[i][1]);
else printf("%sの意味はわかりません。\n", c);
return 0;
}

投稿日時 - 2008-12-15 23:44:00

ANo.3

そのコード断片だけでは情報が少なすぎてなんとも言いようがありません. だいたい「subscripted value is neither array nor pointer」というエラーメッセージがどこに対して出ているのかわからないんだし.
可能なら, コード全体 (少なくともその関数全体) を出してもらえませんか? その方がコメントも付けやすいですし. また, エラーメッセージを出してくれるのはありがたいのですが, 「どの行に対して出ているのか」という情報もあるとうれしいです.
ついでですが, その scanf は危険だと思う.

投稿日時 - 2008-12-15 23:34:10

ANo.2

scanf("%s", ○) で渡すのは「char(文字)へのポインタ」です。
一方「char型の配列c[20]」の場合、cは配列であり、cで「char へのポインタ」になります。&c だと「charの配列へのポインタ」になってしまいます。
ですから、scanfの引数は「scanf("%s", c);」になります。

ループの中ですが、「if (dic[i][0] == d)」とすると「ポインタが等しいかどうか」の判定になります。「ポインタの指し示す先の「文字列」が等しいかどうか」の判定にはなりません。
文字列として等しいかどうかを判定する場合は、関数strcmpなどを使って
「if (strcmp(dic[i][0], d) == 0)」のようにします。

その次の行がscanfなのはprintf の間違いかな。

投稿日時 - 2008-12-15 23:33:11

ANo.1

とりあえず、ソースコードを全部見せてください。
断片だけだと、状況が正確に把握できないことがあります。

投稿日時 - 2008-12-15 23:32:54

あなたにオススメの質問