エラーは出ませんが、実行結果ができません。
このプログラムなんですが、エラーは出ませんが結果が
0群の項目1の正解率は0.000000です
1群の項目1の正解率は0.000000です
2群の項目1の正解率は0.000000です…
この様になり、正解率がでません…
初心者で、わからないので困っています。
お願いします。
#include <stdio.h>
#include <process.h>
#define S 256
#define I 100
#define J 100
#define K 3 //グループの数
//#define M 50//サブコンテンツの数
void sum(int u[][J],int N,int n);
void sort(int y[],int N,int u[][J],int n);
void gunwake(int y[],int start,int N,int gunnum);
void passege(int y[],int div[],int N,int num[],int u[][J],int n);
static int y[I];
int div[K-1];
int divyouso=0;
void main (void)
{
FILE *fp;
int N=0,i=0,j=1,kou=0,n; //N:人数 n:問題数
static int u[I][J];
static int num[I];
char buf[S];
//ファイルオープン
if ((fp=fopen("data_i2_1.csv","r"))==NULL){
printf("Can't open File\n");
exit(1);
}
// 問題数のカウント
fgets(buf,S,fp);
N+=1;
while(buf[i]!='\n'){
kou=kou++;
i+=1;
}
for(i=0;i<=kou;i=i+2){
u[N][j]=buf[i]-'0';
j=j++;
}
n=kou/2+1;
// レコードの読み込み
while (fgets(buf,256,fp)!=NULL){
N+=1;
// 文字型から数値型へ変換
j=1;
for(i=0;i<=kou;i=i+2){
u[N][j]=buf[i]-'0';
j=j++;
}
}
sum(u,N,n);
gunwake(y,0,N,K);
passege(y,div,N,num,u,n);
fclose(fp);
}
void sum(int u[][J],int N,int n)
{
//static int y[I];
int i,ii;
//学習者iの得点の初期化
for(i=0;i<=I;i++)
y[i]=0;
//学習者iの得点の計算
for(i=1;i<=N;i++){
for(ii=1;ii<=n;ii++){
y[i]+=u[i][ii];
}
}
sort(y,N,u,n);
}
void sort(int y[],int N,int u[][J],int n)
{
int left,right,i,shift,t,v;
static int num[I];
//学習者の番号記憶用変数numの初期化
for(i=0;i<=I;i++)
num[i]=0;
for(i=1;i<=N;i++)
num[i]=i;
//シェーカーソート
left=0;
right=N;
while (left<right){
for(i=left;i<right;i++){
if(y[i]>y[i+1]){
t=y[i];
v=num[i];
y[i]=y[i+1];
num[i]=num[i+1];
y[i+1]=t;
num[i+1]=v;
shift=i;
}
}
right=shift;
for(i=right;i>left;i--){
if(y[i]<y[i-1]){
t=y[i];
v=num[i];
y[i]=y[i-1];
num[i]=num[i-1];
y[i-1]=t;
num[i-1]=v;
shift=i;
}
}
left=shift;
}
}
void gunwake(int y[],int start,int N,int gunnum){
int tmp;
int i,up,down,real;
if(gunnum>1){
tmp=N/gunnum+start;
//printf("tmp:%d\n",tmp);
for(i=tmp;y[tmp]==y[i];i--){
}
down = i + 1;
//printf("down:%d\n",down);
for(i=tmp;y[tmp]==y[i];i++){
}
up =i;
//printf("up:%d/n",up);
if(tmp-down > up-tmp)
real=up;
else
real=down;
div[divyouso]=real;
divyouso++;
printf("%d\n",real);
gunwake(y,real,N-real,gunnum-1);
}
}
void passege(int y[],int div[],int N,int num[],int u[][J],int n){
int div2[K+1];
int k=0,j,i;
int pp[I][J];
div2[0]=0;
div2[K]=n;
for(i=0;i<K-1;i++){
div2[i+1]=div[i];
}
for(k=0;k<K;k++){
for(j=0;j<n;j++){
pp[k][j]=0;
for(i=div2[k];i<div2[k+1];i++){
pp[k][j]=pp[k][j]+u[num[i]][j];
}
}
}
//確認
putchar('\n');
for(j=1;j<=n;j++){
for(k=0;k<K;k++){
printf("%d群の項目%dの正解率は%fです\n",k,j,pp[k][j]);
}
}
}
お礼
なるほど、当たり前なんですね! 「0+1=1」はbreakします(゜ω゜)(。_。)(゜ω゜)(。_。)「1+0=1」もbreakします(゜ω゜)(。_。)(゜ω゜)(。_。) breakした時に、「i」には行かず、次は、「j」に行くんですね。 分った気がします。。。。 ありがとうございました!