所以我试图弄清楚为什么以下C代码不起作用:
int isBlank(char *s){
for(;*s != '\0';s++){
if(*s != '\n' || *s != '\r'){
return 0;
}
}
return 1;
}
这个想法是它应该返回0如果它击中任何东西但是\ n或\ r \ n字符否则它将返回1.但它似乎几乎任何一行都返回0?我确信这里有一些非常愚蠢的东西。 :(
答案 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;
}