c如何检查数组的第一个字符

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)

}

Jer*_*myP 7

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'以避免这种情况,从来都不是这样!