数値が 1 つしかないファイルを読み込む小さなプログラムを作成しようとしています。プログラムは、それが 10 進数、16 進数、または 8 進数であるかどうかを出力し、数値自体を表示します。許可される番号について私が作成したルールは次のとおりです。
整数は、10 進数、2 進数、8 進数、または 16 進数の形式で明確に指定できます。これらの形式はすべてオプションの記号で始めることができます。記号は「+」または「-」で、残りの整数との間に区切り文字はありません。
10 進数の整数は、1 つのゼロ、またはゼロ以外の 10 進数で始まる 1 つ以上の 10 進数のシーケンスです。10 進数は、0、1、2、3、4、5、6、7、8、および 9 です。
8 進数はゼロで始まり、単一のゼロ、またはゼロ以外の 8 進数で始まる空でない一連の 8 進数が続きます。8 進数は、0、1、2、3、4、5、6、または 7 のいずれかです。
16 進数はゼロで始まり、その後に大文字または小文字の "x"、単一のゼロまたはゼロ以外の 16 進数、およびゼロ以上の 16 進数のシーケンスが続きます。16 進数には、10 進数と文字 a、b、c、d、e、f、およびそれらの大文字バージョンが含まれます。
あいまいさをなくすために、この説明がどれだけ長くて紛らわしいかに注目してください。「先行ゼロ」はどの表現でも許可されていません。たとえば、0x007 は不適切な 16 進数であり、007 は不適切な 8 進数と不適切な 10 進数の両方です。
私は、プログラムにそれがどのような数であるかを理解させる方法に問題があると思います。