2012年4月20日金曜日

C言語のソースを書きました。どこが間違っているのでしょうか?

C言語のソースを書きました。どこが間違っているのでしょうか?

「Cの絵本」を参考にしています。

コンパイルはできます。

しかし、計算の時の実行結果が思うように表示されません。

どこが間違っているのでしょうか?



ソースファイル名 calliba.h

#ifndef _CALLIB_H_

#define _CALLIB_H_



typedef struct _CALORIE{

char name[40];

float value;



}CALORIE;



int calregist(CALORIE *, int);

int calcalc(CALORIE *, int);



#endif



#include <stdio.h>

#include <string.h>

#include "calliba.h"



ソースファイル名 keibaa2.c

int calregist(CALORIE *pcal, int num)

{

printf("計算する種類を入力してください。");

scanf("%s", (pcal+num)->name);

printf("その計算する種類の値を入力してください。");

scanf("%f", &((pcal+num)->value));

printf("登録しました。\n\n");

return num+1;

}



int calcalc(CALORIE *pcal, int num)

{



char name[40];

int gram;

int totalcal = 0;

int i;



printf("---------計算する種類名一覧-------------------------\n");

for(i = 0; i < num; i++)

printf("%s\t", (pcal+i)->name);

printf("\n-----------------------------------------------------\n");



while(1){

printf("種類名(endで計算):");

scanf("%s", name);

if(strcmp(name, "end") == 0)

break;

printf("terf 0 or dirt 1:" );

scanf("%d", &gram);



if(gram == 0)

totalcal += (pcal+i)->value * 500 ;

else if(gram == 1)

totalcal += (pcal+i)->value * 100;

else if(gram == 2)

break;

}





return totalcal;

}



ソースファイル名 keibaa.c

#include <stdio.h>

#include "calliba.h"



int main()

{

CALORIE cal[500] = {

{"1", 100},

{"2", 50},

{"3", 40},

{"taisa", 110},

{"9 basin", 100},

{"8 basin", 90},

{"7 basin", 80},

{"6 basin", 70},

{"5 basin", 60},

{"4 basin", 50},

{"3 basin", 40},

{"2 basin", 30},

{"1 basin", 20},

{"half basin", 10},

{"0 basin", 5}



};

int cal_num = 15;

int mode = 0;



printf("一頭に対する指数値\n");

while(1) {

printf("登録は1を、計算は2を、終了は0を入力してください。");

scanf("%d", &mode);

if(mode == 0)

break;

else if(mode == 1)

cal_num = calregist(cal, cal_num);

else if(mode == 2)

// printf("競馬指数:%6.2fpoint\n\n", calcalc(cal, cal_num));

printf("競馬指数:%dpoint\n\n", calcalc(cal, cal_num));

}

return 0;

}







//ソースファイル名_calliba.h

#ifndef__CALLIB_H_

#define__CALLIB_H_



typedef_struct__CALORIE{

_//char__name[40];

__char__name[12];

__int___value;

}CALORIE;



int_calregist_(CALORIE_*,_int);

int_calcalc___(CALORIE_*,_int);



#endif





//ソースファイル名_keibaa2.c

#include__<stdio.h>

#include__<string.h>

#include__"calliba.h"



//_登録

int_calregist(CALORIE_*pcal,int_num){

__CALORIE___*pc=pcal+num;

__printf("計算する種類を入力してください。");

___scanf("%s",_pc->name);

__printf("その計算する種類の値を入力してください。");

___scanf("%d",_&pc->value);

__printf("登録しました。\n\n");

__return_num+1;

}



//_計算

int_calcalc(CALORIE_*pcal,int_num){

__CALORIE_*pc;

__char____name[40];

__int_____gram;

__int_____totalcal_=_0;

__int_____i,j;



__printf("---------計算する種類名一覧-------------------------\n");

__for(i=0;i<4;i++){

____pc_=_pcal+i;

____for(j=i;j<num;j+=4){

______printf("%-12s",_pc->name);

______pc+=4;

____}_printf("\n");

__}

__printf("\n-----------------------------------------------------\n");

__while(1){

____printf("種類名(endで計算):");

____scanf("%s",_name);

____if(strcmp(name,_"end")_==_0)_break;

____printf("terf_0_or_dirt_1:"_);

____scanf("%d",_&gram);

____pc_=_pcal;

____for(i=0;i<num;i++){

______if(strcmp(pc->name,name)==0){

________if(gram_==_0){

________totalcal_+=_pc->value_*_500_;

________}_else_if(gram_==_1){

__________totalcal_+=_pc->value_*_100;

________}_else_{

__________break;

________}

______}

______pc++;

____}

__}

__return_totalcal;

}



//_ソースファイル名_keibaa.c

#include__<stdio.h>

#include__"calliba.h"



int_main(){

__CALORIE_cal[500]_=_{

______{"1"__________,_100},

______{"2"__________,_50_},

______{"3"__________,_40_},

______{"taisa"______,_110},

______{"9_basin"____,_100},

______{"8_basin"____,_90_},

______{"7_basin"____,_80_},

______{"6_basin"____,_70_},

______{"5_basin"____,_60_},

______{"4_basin"____,_50_},

______{"3_basin"____,_40_},

______{"2_basin"____,_30_},

______{"1_basin"____,_20_},

______{"half_basin"_,_10_},

______{"0_basin"____,_5__}};

__int_num__=_15;

__int_mode_=_0;



__printf("一頭に対する指数値\n");

__while(1)_{

____printf("登録は1を、計算は2を、終了は0_>");

____scanf("%d",_&mode);

____if(mode_==_0)_{

______break;

____}_else_if(mode_==_1)_{

______num_=_calregist(cal,_num);

____}_else_if(mode_==_2)_{

______printf("競馬指数:%dpoint\n\n",_calcalc(cal,_num));

____}

__}

__return_0;

}

/*_出力:

一頭に対する指数値

登録は1を、計算は2を、終了は0_>2

---------計算する種類名一覧-------------------------

1___________9_basin_____5_basin_____1_basin

2___________8_basin_____4_basin_____half_basin

3___________7_basin_____3_basin_____0_basin

taisa_______6_basin_____2_basin



-----------------------------------------------------

種類名(endで計算):1

terf_0_or_dirt_1:0

種類名(endで計算):2

terf_0_or_dirt_1:0

種類名(endで計算):3

terf_0_or_dirt_1:0

種類名(endで計算):end

競馬指数:95000point



登録は1を、計算は2を、終了は0_>0

*/

0 件のコメント:

コメントを投稿