虽然编写非常简单的程序来删除空格,制表符,换行符,但我遇到了一些我实际上并没有先抓到的东西; 即使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)
s[i]!=' ' || s[i]!='\t' || s[i]!='\n'
是永远正确的.字符不能等于空格,制表符和换行符.
问题是
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)
归档时间: |
|
查看次数: |
1136 次 |
最近记录: |