ページ 11

エラーメッセージの意味がよく分かりません

Posted: 2012年10月25日(木) 23:46
by miku

コード:

 #include <stdio.h>
#include <stdlib.h>
int main(void) 
{
 FILE *fp; 
 int ip, ih, ii,  rnd; 
 int hst[10]={0.0}; 
 float x;
 for(ii=0;ii<10000;ii++)
  {
   rnd=rand( ); 
   x=(float)rnd/RAND_MAX; 
   float point[10000]={x};
   for(ip=0;ip<10000;ip++)
   { 
   if(0<=point[ip]<0.10)   hst[0.05]++; 
   if(0.1<=point[ip]<0.20) hst[0.15]++; 
   if(0.2<=point[ip]<0.30) hst[2.5]++; 
   if(0.3<=point[ip]<0.40) hst[3.5]++; 
   if(0.4<=point[ip]<0.50) hst[4.5]++; 
   if(0.5<=point[ip]<0.60) hst[5.5]++;  
   if(0.6<=point[ip]<0.70) hst[6.5]++; 
   if(0.7<=point[ip]<0.80) hst[7.5]++; 
   if(0.8<=point[ip]<0.90) hst[8.5]++;
   if(0.9<=point[ip]<1.0)  hst[9.5]++; 
   }
   }
   fp = fopen("score.csv","w"); 
   for(ih=0;ih<10;ih++)
   {
   printf("hst[%d]=%d\n",ih,hst[ih]);
   fprintf(fp,"%d,%d\n",ih,hst[ih]);
   }
   fclose(fp);
   printf("RAND_MAX=%d¥n",RAND_MAX); 
   return 0;
   }
 
上記のコードを実行しようとすると
kadai14.0.c:16: error: array subscript is not an integer
kadai14.0.c:17: error: array subscript is not an integer
kadai14.0.c:18: error: array subscript is not an integer
kadai14.0.c:19: error: array subscript is not an integer
kadai14.0.c:20: error: array subscript is not an integer
kadai14.0.c:21: error: array subscript is not an integer
kadai14.0.c:22: error: array subscript is not an integer
kadai14.0.c:23: error: array subscript is not an integer
kadai14.0.c:24: error: array subscript is not an integer
kadai14.0.c:25: error: array subscript is not an integer
というエラーメッセージが出るのですが
どうすればよいでしょうか。
よろしくお願いします

Re: エラーメッセージの意味がよく分かりません

Posted: 2012年10月26日(金) 00:22
by nil
インデントは正確に行ってください。

C/C++(とその他大部分の言語)では条件文を
0<=point[ip]<0.10
このように書くことはできません(動かないわけではないのですが、mikuさんの予想とは異なった動作をするはずです)。
0 <= point[ip] && point[ip] < 0.10
のように書かねばなりません

Re: エラーメッセージの意味がよく分かりません

Posted: 2012年10月26日(金) 00:23
by nil
あと、配列の添字は整数型でなければならず、
hst[0.05]++;
これもまた不可です

追記:
おかしい点が多いため、追記します。

コード:

 #include <stdio.h>
#include <stdlib.h>
int main(void) 
{
 FILE *fp; 
 int ip, ih, ii,  rnd; 
 int hst[10]={0.0};  // int型(整数型)をdouble型(実数型)で初期化している
 float x;
 for(ii=0;ii<10000;ii++)
  {
   rnd=rand( ); 
   x=(float)rnd/RAND_MAX; 
   float point[10000]={x}; // ここではpoint[0]にxが代入されただけ
   for(ip=0;ip<10000;ip++)
   { 
   if(0<=point[ip]<0.10)   hst[0.05]++;  // 条件文内、float型とdouble型を比較している
   if(0.1<=point[ip]<0.20) hst[0.15]++; 
   if(0.2<=point[ip]<0.30) hst[2.5]++; 
   if(0.3<=point[ip]<0.40) hst[3.5]++; 
   if(0.4<=point[ip]<0.50) hst[4.5]++; 
   if(0.5<=point[ip]<0.60) hst[5.5]++;  
   if(0.6<=point[ip]<0.70) hst[6.5]++; 
   if(0.7<=point[ip]<0.80) hst[7.5]++; 
   if(0.8<=point[ip]<0.90) hst[8.5]++;
   if(0.9<=point[ip]<1.0)  hst[9.5]++; 
   }
   }
   fp = fopen("score.csv","w"); 
   for(ih=0;ih<10;ih++)
   {
   printf("hst[%d]=%d\n",ih,hst[ih]);
   fprintf(fp,"%d,%d\n",ih,hst[ih]);
   }
   fclose(fp);
   printf("RAND_MAX=%d¥n",RAND_MAX); 
   return 0;
   }

Re: エラーメッセージの意味がよく分かりません

Posted: 2012年10月26日(金) 21:32
by box
miku さんが書きました: というエラーメッセージが出るのですが
どうすればよいでしょうか。
その前に、「これは何々をしたいプログラムです。」という説明がなくていいんでしょうか。