c-数据类型if语句不识别数值

c-数据类型if语句不识别数值,c,types,C,Types,我试图通过串行控制台接收10个字符,并将它们添加到一个名为buffer的数组中。字符必须是以下0、1、L或S中的一个 它表示1和0无效,但“L”和“S”可以。我的数据类型是否有误 谢谢 int main(void) { int ch; char buffer[10] = ""; for (int i = 0; i < 10; i++) { putstring("Enter command\r\n"); ch = getcharacter(); if ((ch

我试图通过串行控制台接收10个字符,并将它们添加到一个名为
buffer
的数组中。字符必须是以下0、1、L或S中的一个

它表示1和0无效,但“L”和“S”可以。我的数据类型是否有误

谢谢

int main(void)
{
int ch;

char buffer[10] = "";

for (int i = 0; i < 10; i++) {

    putstring("Enter command\r\n");
    ch = getcharacter();

    if ((ch == '0') || (ch == '1') || (ch == 'L') || (ch == 'S')) {

        buffer[i] = ch;
        putstring(ch);
    }
    else {
        putstring("Input not valid");
        break;
    }
}
}


void putstring(char *str) {

    /*Needs an error check such as timeout or check for NULL string*/
    const uint32_t transmit_ready = 1 << 6;

    while (*str != '\0') {

        if ((*uart_status_reg)  & transmit_ready) {

            *uart_txdata_reg = *str;
            str++;
        }
    }

}

int getcharacter(void) {

    uint8_t 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 ((int) c);
}
int main(无效)
{
int-ch;
字符缓冲区[10]=“”;
对于(int i=0;i<10;i++){
putstring(“输入命令\r\n”);
ch=getcharacter();
如果((ch='0')| |(ch='1')| |(ch='L')| |(ch='S')){
缓冲区[i]=ch;
putstring(ch);
}
否则{
putstring(“输入无效”);
打破
}
}
}
void putstring(char*str){
/*需要错误检查,如超时或检查空字符串*/

const uint32\u t transmit\u ready=1为什么不在返回
getcharacter()
putstring(ch)后添加一些调试;
是错误的,因为它需要一个字符串,但您给了它一个int。打开警告;您的编译器应该已经标记了它。接收代码看起来正常,除了可能返回int而不是unsigned int。请注意,
buffer
的大小应该是11,以便能够容纳10个字符和一个终止的null。幸运的是您初始化了buffer到“”,因为现在它都是零,因为您忘记添加终止null(或者是故意的吗?),如果程序拒绝您认为它应该接受的输入,那么您应该检查的第一件事是它是否实际接收到您认为它正在接收的内容。或者换句话说,如果控件达到
putstring(“输入无效”)代码< >代码> CH <代码>不等于“<代码> > 0′<代码>,<代码>‘1'’/代码>,<代码> 'L' ,或<代码> '/COD>。也许您有一个区分大小写的问题,或者划过大小写敏感度。e接收值为0和1的字节,而不是表示数字字符“0”和“1”的字节。