如何在C中检查新行和回车

时间:2013-03-06 08:29:28

标签: c

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

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

这个想法是它应该返回0如果它击中任何东西但是\ n或\ r \ n字符否则它将返回1.但它似乎几乎任何一行都返回0?我确信这里有一些非常愚蠢的东西。 :(

3 个答案:

答案 0 :(得分:5)

你的逻辑略有偏差 - 改变:

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

为:

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

答案 1 :(得分:2)

 But it seems to return 0 for almost any line?

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

答案 2 :(得分: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;
}