2013-03-06 35 views
1

所以我想弄清楚,爲什麼下面的C代碼不起作用:如何檢查新線和回車用C

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

的想法是,如果它擊中它應該返回0任何東西,但\ n或\ r字符,否則它會返回1.但幾乎任何行似乎返回0?我確信我在這裏錯過了一些非常愚蠢的東西。 :(

回答

5

你的邏輯是稍微偏離 - 變化:

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

到:

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

我想撞牆的一聲我的頭20分鐘直。謝謝。我知道。 *黯然失色* Demorgans:P – user2139009 2013-03-06 08:39:09

+1

打我吧=] – Dmitry 2013-03-06 08:51:34

+0

爲什麼匿名倒票,我想知道? – 2013-03-06 09:05:21

2
But it seems to return 0 for almost any line? 

大部分線路將僅在一行的末尾有\n\r在你代碼,當你遇到除\n\r之外的任何字符時,你將返回0,這就是你總是得到0的原因。

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; 
} 
+0

太棒了,但我不認爲OP有這個想法。 – 2013-03-06 08:39:52