我试图在串行控制台上输入10个字符,然后将它们添加到名为buffer的数组中。第一个角色需要是' L'或者' S'以及下一个字符' 1'或者' 0'。
代码传递第一个if语句ok。但是,即使我进入L' L'行if((buffer[0] != 'L') || (buffer[0] != 'S'))
似乎也无效。或者' S'。
使用buffer[0] !=
表示法有什么问题吗?
int main(void)
{
char ch;
char buffer[10] = "";
putstring("Enter 9 characters beginning with 'L' or 'S' and 8 digits\r\n");
for (int i = 0; i < 9; i++) {
ch = getcharacter();
if ((ch == '0') || (ch == '1') || (ch == 'L') || (ch == 'S')) {
buffer[i] = ch;
//check first character
if((buffer[0] != 'L') || (buffer[0] != 'S')) {
printf("First letter must be L or S\r\n");
goto error;
}
error:
return -1;
}
}
}
int getcharacter(void) {
char c = 0;
const uint32_t recieve_ready = 1 << 7;
//disable interrupt for a read ready
*uart_control_reg = 0;
while (1) {
//check if RRDY bit is set
if ((*uart_status_reg) & recieve_ready) {
c = *uart_rxdata_reg;
break;
}
}
return ((char) c);
}
答案 0 :(得分:7)
if((buffer[0] != 'L') || (buffer[0] != 'S'))
错了,你需要
if((buffer[0] != 'L') && (buffer[0] != 'S'))
或
if (!(buffer[0] == 'L' || buffer[0] == 'S'))
您的原始代码是“如果char不是L或char不是S”,这始终是真的。如果char是L,则第二部分为真,使整个if语句成立。
刚才注意到Chris Turner的评论。始终会执行return -1
,移动它以替换显示goto error
的行。
答案 1 :(得分:5)
尝试使用
if((buffer[0] != 'L') && (buffer[0] != 'S'))
而不是
if((buffer[0] != 'L') || (buffer[0] != 'S'))
这里只是一些逻辑问题。根据你的代码,char需要等于'L'和'S'以避免这种情况,这绝不是这种情况!