入力は、間にスペースを入れた整数ワード整数の形式にする必要があります。私は以下のコードを書きました。現在、コードのエラー チェック部分に取り組んでいます。
入力の形式が正しくない場合、どのようにチェックすればよいですか?
チェックする必要がある 3 つのエラー タイプの入力形式は、"WORD 99"、"10WORD 33"、および "10 WORD" です。
もう少し詳しく説明します。入力の形式は 10 READ 10 です。最初の整数 10 は、残りの入力が格納されるメモリ アドレスです。単語、またはこの場合は READ が命令です。convertOpCode 関数は、単語内の文字を照合して既知の命令と一致するものを見つけ、命令コードをオペレーション コード レジスタ (*operationCode) に保存します。2 番目の整数は、操作が使用するアドレスです。Read は、ユーザー入力をこの 2 番目の整数のアドレス位置に格納します。
現在、convertoOpCode 関数は最初のスペースを破棄し、スペースを読み取るまで次の文字を読み取ります。スペース間の文字が既知の操作と一致する場合、対応する操作コードを保存して戻ります。既知の操作が見つからない場合は、エラーをスローしてプログラムを終了します。
同様に、表示されている変数のみに制限されています。コンパイルの結果と表示されている5つのint変数を格納するためのint配列「メモリ」があります。他の配列やバッファを作成できません。
int compile( int memory[], int *accumulator, int *instructionCounter,
int *instructionRegister, int *operationCode, int *operand ){
while( scanf( "%d", accumulator) == 1 ){
*instructionRegister = convertOpCode( instructionCounter, instructionRegister, operationCode, operand );
if( *instructionRegister == 0 ){
ERRORUC( accumulator );
scanf( "%d", operand );
if( *operationCode != 22 ){
if( *operand > 99 ){
ERROROPERAND( accumulator );
memory[ *accumulator ] = ( ( *operationCode ) * 100 ) + ( *operand );
}
else{
if( *operand > 9999 ){
ERRORSET( accumulator );
}
memory[ *accumulator ] = *operand;
}
}
checkHalt( memory, instructionCounter, accumulator );
print( memory );
return 0;
}
ここで要求されているのは、convertOpCode 関数がどのように見えるかです。
int convertOpCode( int *reg1, int* reg2, int* opCode, int* reg3 ){
getchar();
*reg1 = (int)getchar();
*reg2 = (int)getchar();
*reg3 = (int)getchar();
*opCode = (int)getchar();
switch( *reg1 ){
case (int)'R':
if( *reg2 == (int)'E' && *reg3 == (int)'A' && *opCode == (int)'D' ){
*reg1 = (int)getchar();
if( *reg1 == (int)' ' ){
*opCode = READ;
return 1;
}else{
return 0;
}
}else{
return 0;
}
case (int)'W'.....
}