1

所以我试图弄清楚为什么下面的 C 代码不起作用:

int isBlank(char *s){
    for(;*s != '\0';s++){
        if(*s != '\n' || *s != '\r'){
            return 0;
        }
    }
    return 1;
}

这个想法是,如果它碰到任何东西但一个 \n 或 \r 字符,它应该返回 0,否则它将返回 1。但它似乎几乎对任何行都返回 0?我敢肯定我在这里遗漏了一些非常愚蠢的东西。:(

4

3 回答 3

5

你的逻辑有点不对劲 - 改变:

    if(*s != '\n' || *s != '\r'){

到:

    if(*s != '\n' && *s != '\r'){
于 2013-03-06T08:34:08.413 回答
2
 But it seems to return 0 for almost any line?

大多数行将\n\r仅在行尾。在您的代码中,当您遇到除\nor以外的任何字符时,您将返回 0,\r这就是您总是得到 0 的原因。

于 2013-03-06T08:34:53.047 回答
0

如果你替换它,它会起作用 || 和 &&

#include <stdio.h>

int isBlank(char *s)
{
    for (;*s != '\0'; s++) {
        if (*s != '\n' && *s != '\r') {
            return 0;
        }
    } 
    return 1;
}

int main()
{
    char *msg1 = "hello, world\n";
    char *msg2 = "hello, world!";
    char *msg3 = "";
    char *msg4 = "\r";
    printf("msg1 is blank: %i\n", isBlank(msg1));
    printf("msg2 is blank: %i\n", isBlank(msg2));
    printf("msg3 is blank: %i\n", isBlank(msg3));
    printf("msg4 is blank: %i\n", isBlank(msg4));


    return 0;
}
于 2013-03-06T08:37:55.193 回答