これは、ローマ数字 (たとえば VI) を 10 進数に変換するプログラムです。アルゴリズムは、入力文字列の各要素を認識し、対応する値を 10 進数で返す関数を作成しています。
char Roman_num[20]
For each element, を取得しましたsum+=value(Roman_num[i])
。関数のプロトタイプはint value (char digit)
です。結果として、' Invalid conversion from char to char *'エラーが発生します。
ただし、各要素のアドレス&a[i]
を関数に渡し、プロトタイプを に変更するとint value (char *digit)
、このエラーは繰り返されませんが、このスイッチ ケース (関数内) で別のエラーが発生し switch (*digit)
ます。定数式
私の質問は、それが明確ではなかったことです。この例では、アドレスだけを関数に渡す必要がありますか? 値、単一の文字値を渡したい場合は、どうすればよいでしょうか? 最後になりましたが、 *digit は実際には 1 文字ですが、なぜ定数式に表示できないのcase()
ですか?
私はあなたの助けに感謝します。一方で、C を深く理解するためのおすすめの本を教えてください。私は今C : How To Programの本を使っていますが、変数、関数が内部でどのように機能しているかについては、理解を深めるためにほとんど知りません。
これはコードです:
int value (char *digit);
int main (void)
{
char a[100];
int length,i,sum=0;
printf("Enter your Roman number: ");
fflush(stdin);
gets(a);
printf("\nThe Roman number that you have entered is %s",a);
length=strlen(a);
for (i=0;i<length;i++)
{
sum+=value(&a[i]);
}
printf("\nthen it is: %d",sum);
getch();
return 0;
}
int value (char *digit)
{
int num;
case ( *digit ){
case 'M':
num=1000;
break;
case 'D':
num=500;
break;
case 'C':
num=100;
break;
case 'L':
num=50;
break;
case 'X':
num=10;
break;
case 'V':
num=5;
break;
case 'I':
num=1;
break;
}
return num;
}