1 c types if-statement serial-port
我试图通过串行控制台接受10个字符,并将它们添加到一个名为buffer的数组中.第一个字符需要为"L"或"S",下一个字符为"1"或"0".
代码传递第一个if语句ok.但if((buffer[0] != 'L') || (buffer[0] != 'S'))即使我输入'L'或'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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
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);
Run Code Online (Sandbox Code Playgroud)
}
if((buffer[0] != 'L') || (buffer[0] != 'S'))
Run Code Online (Sandbox Code Playgroud)
是错的,你需要
if((buffer[0] != 'L') && (buffer[0] != 'S'))
Run Code Online (Sandbox Code Playgroud)
要么
if (!(buffer[0] == 'L' || buffer[0] == 'S'))
Run Code Online (Sandbox Code Playgroud)
您的原始代码是"如果char不是L或char不是S",这始终是真的.如果char是L,则第二部分为真,使整个if语句成立.
刚刚注意到Chris Turner的评论.将return -1始终执行,将它替换这行goto error.
小智 5
尝试使用
if((buffer[0] != 'L') && (buffer[0] != 'S'))
Run Code Online (Sandbox Code Playgroud)
代替
if((buffer[0] != 'L') || (buffer[0] != 'S'))
Run Code Online (Sandbox Code Playgroud)
这里只是一些逻辑问题.根据你的代码,char需要等于'L'和'S'以避免这种情况,从来都不是这样!
| 归档时间: |
|
| 查看次数: |
438 次 |
| 最近记录: |