質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

1回答

21396閲覧

C言語 式には pointer-to-object型が必要です。

Alyn

総合スコア50

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2018/07/17 14:01

編集2018/07/24 12:21

入力間違えでした。すみません。

pointer-to-object型にする

C言語でタイピング練習プログラムを作っています。
以前はvisual studio c++ 2008を使っていた時には問題く動いたのに、visual studio 2017 c++では、「式には pointer-to-object型が必要です。」「 error C2109: 配列または、ポインターでない変数に添字が使われました。」が出てきて動かなくなりました。
どうしたらよいでしょうか?

発生している問題・エラーメッセージ

「式には pointer-to-object型が必要です。」 「 error C2109: 配列または、ポインターでない変数に添字が使われました。」

該当のソースコード

C言語

1#include<stdio.h> 2#include<stdlib.h> 3#include<time.h> 4#include<conio.h> 5 6void shuffle(int data[], int size) 7{ 8 int x = 0; 9 int pos = 0; 10 int tmp = 0; 11 12 for (x = 0; x < size; x++) 13 { 14 pos = rand() % (size - x); 15 tmp = data[size - x - 1]; 16 data[size - x - 1] = data[pos]; 17 data[pos] = tmp; 18 } 19} 20 21int main(void) 22{ 23 char moji4[23][5] = { "getc","putc","feof","gets","puts","free","labs","atof","atoi","atol","ldiv", 24 "rand","exit","time","case","else","char","long","main","null","void","math","enum" }; 25 26 int rns4[23]; 27 28 int j, i, r, miss; 29 char input, sen, retry; 30 double req_time; 31 clock_t start, end; 32 33 do { 34 printf("【タイピング練習プログラム】4~7文字のタイピングができます。文字数を入力:"); 35 while (1) 36 { 37 sen = _getch(); 38 if ((sen == 0x34) && (sen == 0x35) && (sen == 0x36) && (sen == 0x37)) 39 { 40 printf("%c\n\n", sen); 41 break; 42 } 43 } 44 switch (sen) 45 { 46 case 0x34: 47 printf("【タイピング練習プログラム~4文字編~】スペースキーでスタート"); 48 while (input != 0x20) 49 { 50 input = _getch(); 51 if (input == 0x20) 52 { 53 for (r = 9; r < 23; r++) 54 { 55 rns4[r] = r; 56 } 57 putchar('\n'); 58 miss = 0; 59 } 60 } 61 62 srand((unsigned int)time(NULL)); 63 shuffle(rns4, 23); 64 start = clock(); 65 66 for (j = 0; j < 20; j++) 67 { 68 printf("\n第%d問\n", j + 1); 69 printf("【%s】を入力してください:"&moji4[rns4[j][0]]); // ←ここの[0] 70 for (i = 0; i < 4; i++) 71 { 72 while (1) 73 { 74 input = _getch(); 75 if (input == moji4[rns4[j][i]]) // ←ここの[i] 76 { 77 printf("%c", input); 78 break; 79 } 80 else 81 { 82 putchar('\n'); 83 miss++; 84 } 85 } 86 } 87 putchar('\n'); 88 } 89 break; 90 91 default: //5~7文字編は省略しています 92 break; 93 } 94 95 end = clock(); 96 req_time = (double)(end - start) / CLOCKS_PER_SEC; 97 printf("\n≪タイピング練習プログラム終了。≫\n  Time:%1f秒/Miss:%d回\n\n", req_time, miss); 98 printf("もう一度挑戦しますか?(YESはスペースキー/NOはスペースキー以外を入力)"); 99 retry = _getch(); 100 puts("\n"); 101 102 } while (retry == 0x20); 103 104 return 0; 105}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

moji4[rns4[j][i]]) // ←ここの[i]

宣言は、

int rns4[23];

なんで、二次元配列ではないですね。

moji4[rns4[j])[i])

の間違いでしょうか? (他も同様)

投稿2018/07/17 14:34

pepperleaf

総合スコア6383

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Alyn

2018/07/17 14:37

自分が入力間違えをしていただけでした。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問