-1

これは、ローマ数字 (たとえば 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;
}
4

1 に答える 1