C模糊问题

hig*_*der 1 c

虽然编写非常简单的程序来删除空格,制表符,换行符,但我遇到了一些我实际上并没有先抓到的东西; 即使if条件为真,只有当tab,space或newline不存在时,仍然会因为某些原因执行上面提到的..这里是代码

#include <cstdio>
#include <cstring>
#include <stdio.h>
#include <string.h>

#define LGT 100

void rem(char s[])
{
 int i;
 for(i=(strlen(s)-1);i>=0;i--)
  if(s[i]!=' ' || s[i]!='\t' || s[i]!='\n')
   break;
  s[i+1]='\0';

}
int main(void)
{
 char v[LGT]={"sdsfg\t"};

 rem(v);
 printf("%s\n",v);
 getchar();
}
Run Code Online (Sandbox Code Playgroud)

Ily*_*gan 9

s[i]!=' ' || s[i]!='\t' || s[i]!='\n'永远正确的.字符不能等于空格,制表符和换行符.

  • 有关详细信息,谷歌"DeMorgan的定理". (6认同)

tem*_*def 6

问题是

  if(s[i]!=' ' || s[i]!='\t' || s[i]!='\n')
Run Code Online (Sandbox Code Playgroud)

永远是真的.如果s[i]是空格,那么后两个检查都是真的.如果它不是空格,那么第一次检查是真的.

要解决此问题,请将这些更改为ands:

if(s[i]!=' ' && s[i]!='\t' && s[i]!='\n')
Run Code Online (Sandbox Code Playgroud)

或者,更好的是,使用isspace:

 if(isspace(s[i])
Run Code Online (Sandbox Code Playgroud)