プロが教える店舗&オフィスのセキュリティ対策術

エラー 添字が付けられた値が、配列、ポインタまたはベクトルではありません。
とでてしまいます。原因がわかりません。

「エラー 添字が付けられた値が、配列、ポイ」の質問画像

A 回答 (9件)

#include <stdio.h>


int main()
{
 int i ;
 char hoge_hoge_fuga_fuga[]="hello\" ;
 for(i=0;moji[i]!='\0';i++){
  printf("%c\n",moji[i]);
 }
 return 0;
}

これだったら、何が間違えているか、わかりますよね?
あなたの(int i,moji;のmojiを消した)プログラムは、これとまったく同じです。



> mojiを宣言しろって言われる

この場合、3つの場合が考えられます
(1) 本当に宣言を忘れている
(2) 正しく宣言したのに、使う時に間違えている。
 int count ; /* count というint型の変数を使いたいので宣言 */
 caunt = 1 ; /* countのつもりで、打ち間違えている */
(3) 間違えて宣言したので、正しい名前で使おうとしても使えない
 int caunt ; /* count というint型の変数を使いたいのに、間違えている */
 count = 1 ; /* 使いたい変数名は正しいのに、宣言が間違えているので使えない */

コンピュータには、このうちどれかを判断する能力はありません。
なので「宣言しろ」としかメッサージを出せません。


修正方法は、(1)は「宣言を追加する」ですが、(2)(3)は「正しい名前になおす」です。
(2)(3)を「宣言の追加」で対応してしまうと、他のエラーになったり(現在の「添字が付けられた値が〜」と出る状態),
コンパイルエラーは出ないけど、実行すると思ってたのと違う、ということになります。


コツは、疑うことです。
「絶対に間違ってない」という目で見ると、間違ってないように見えてしまいます。
iとjは字面も似てるし、キーボードの位置も近くです。
ji と打とうとして、 ij になってしまうこともあるでしょう。
書き写した元の紙が手書きで判別しにくいとか、汚れてるとか、誤植でそもそも間違っているとか、いろんなケースが考えられます。
    • good
    • 1
この回答へのお礼

ありがとうございます!

お礼日時:2017/09/28 23:14

>結局どこを変えればよろしいのでしょう


No5のように変えれば、OKです。
    • good
    • 1

何がまずいのか理解できていますか?

    • good
    • 0
この回答へのお礼

いいえ笑

お礼日時:2017/09/26 22:09

>そーするとmojiを宣言しろって言われるんですよね



そりゃ、for文やprintf()内で参照しているからでしょう。
『変数名を間違えている』ことに気付かないと先に進みませんよ。
    • good
    • 1
この回答へのお礼

結局どこを変えればよろしいのでしょう

お礼日時:2017/09/26 15:59

以下のようにしてください。


1)
int i,moji;

int i;
2)
char moij[]・・・を
char moji[]・・・
  ^^^^
    • good
    • 0

本題とは関係ないのだが moij の最後になぜ \0 が付いているんだろうか.

    • good
    • 0

int型のmoji要らなくね?

    • good
    • 0
この回答へのお礼

そーするとmojiを宣言しろって言われるんですよね

お礼日時:2017/09/26 08:11

>もーちょい詳しくお願いします



いや、指摘されたまんまでしょう。
for文のループ条件やprintf()の中で見たいのはmoij[]じゃないんですか?
int型のmojiは配列じゃないですよ。

紛らわしい変数名つけて、自分が惑わされていれば…楽しいですね。
数学の教科書開いて国語の勉強しましょう。
    • good
    • 1

moji は int


moij は char []
    • good
    • 0
この回答へのお礼

もーちょい詳しくお願いします

お礼日時:2017/09/26 00:07

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