输入应该是整数字整数的格式,中间有空格。我已经编写了下面的代码,据我所知它有效。我现在正在处理代码的错误检查部分。
如果输入的格式不正确,我将如何检查它?
我需要检查的三种错误类型将具有以下输入格式:“WORD 99”、“10WORD 33”和“10 WORD”。
提供更多细节。输入的形式为 10 READ 10。第一个整数 10 是输入的其余部分将存储的内存地址。在这种情况下,单词或 READ 是指令。convertOpCode 函数将单词中的字母与已知指令进行匹配,并将指令代码保存到操作码寄存器中,即*operationCode。第二个整数是操作使用的地址。读取会将用户输入存储到第二个整数的地址位置。
现在 convertoOpCode 函数丢弃第一个空格并读取下一个字符,直到它读取一个空格。如果空格之间的字符与已知操作匹配,则保存相应的操作代码并返回,如果未找到已知操作,则抛出错误并退出程序。
同样,我仅限于显示的变量。我有 int 数组“内存”来存储编译结果和显示的 5 个 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'.....
}