● StrCalc の実装
3.変数の削除
登録されている特定の変数を削除するには、関数StrCalc_delete_param を使用します。
例.
#include <stdio.h>
#include <string.h>
#include "sc39.h"
int set_param(PSTRCALC_PARAM );
void print_param(PSTRCALC_PARAM );
char *param_tbl[] = {
"alpha", "bravo", "charlie", "delta", "echo", 0
};
void main(void)
{
STRCALC_PARAM prm;
if (!StrCalc_init(&prm)){
printf("メモリの確保に失敗しました\n");
return;
}
/* テーブルの変数を登録します */
if (!set_param(&prm)){
StrCalc_term(&prm);
printf("変数の登録に失敗しました\n");
return;
}
/* 登録状況を確認してみる */
printf("\n登録直後\n");
print_param(&prm);
printf("\n");
/* 変数alpha 、charlie を削除します */
if (StrCalc_delete_param(&prm,"alpha") <= 0 ||
StrCalc_delete_param(&prm,"charlie") <= 0){
StrCalc_term(&prm);
printf("変数削除に失敗しました\n");
return;
}
/* 削除後の状況を確認してみる */
printf("\n削除後\n");
print_param(&prm);
StrCalc_term(&prm);
}
/* テーブルの変数を登録 */
int set_param(PSTRCALC_PARAM prm)
{
PARAM_INFO inf;
char **pptbl;
inf.type = PRM_SINGLE; /* 単一変数 */
inf.btempflg = 0; /* テンポラリ属性無し */
pptbl = param_tbl;
do{
strcpy(inf.name,*pptbl);
if (StrCalc_new_param(prm,&inf) <= 0)
return 0;
}while(*++pptbl);
return 1;
}
/* 変数内容の確認 */
void print_param(PSTRCALC_PARAM prm)
{
char **pptbl;
int ret;
pptbl = param_tbl;
do{
printf("%s : ",prm->str = *pptbl);
if ((ret = StrCalc(prm)) == STATUS_NORMAL && prm->ans == 0.0)
printf("登録\n");
else if (ret == STATUS_ILLEGALNUM_STR)
printf("存在せず\n");
else
printf("エラー %d\n",ret);
}while(*++pptbl);
}
ソースファイル(zip)
この例では、変数alpha 、bravo 、charlie 、delta 、echo を登録し、その中から alpha と charlie だけを削除しています。
関数StrCalc_delete_param には、既に登録されている変数名を指定する必要があります。