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

时间:2017-03-13 15:30:19

标签: c if-statement types serial-port

我试图在串行控制台上输入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);

}

2 个答案:

答案 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'以避免这种情况,这绝不是这种情况!