1

そのため、次の C コードが機能しない理由を理解しようとしています。

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

アイデアは、何かにヒットした場合は 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の最後にのみあります。\nコードでは、または以外の文字に遭遇した瞬間に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 に答える