如何检查我的字符字符串是否有空格?

How to check my char string for spaces?

我想获取一个字符串并在没有空格的情况下输出它。我写了下面的代码,但我的 if 语句似乎没有检测到 char 字符串中的空格,或者我没有做对。

我认为我的问题出在 if 语句中,但我不知道如何解决它。

int main (void)
{
  char s[50];

  printf("Enter string:");
  fgets(s,50,stdin);

  for( int i = 0; i < strlen(s); i++ ){
    if( &s[i] != " " ){
     printf("%c\n", s[i]);
    }
  }

  return 0;
}

输出:

Enter string:xales was here
x
a
l
e
s

w
a
s

h
e
r
e

需要注意的是,一个double-quoted字符实际上是一个字符串,而不是char类型。这个值保存了一个内存地址,指向程序内存中的一个位置(不是堆栈上的值),恰好是 2 个字节长(一个用于 space,一个用于 [=10=])。所以这就是第一件事:将 " 更改为 ' 并且您将在堆栈上有一个字符,可以按值进行比较。

第二点是,通过在此处使用 & 符号,您试图与字符串中第 i 个索引的地址进行比较,而不是与此处的值进行比较。只需删除 &.

是的,你是对的。您的 if 条件始终为真,因此,您最终将按原样打印整个字符串。
你的 if 条件: if( &s[i] != ' ' ) print s [i];

这里的“&”代表地址。所以在你的 if 块中你正在检查的是:

  ` if(addressof( s[i] != ' ') print s[i]; `

现在地址永远不会 space,因此您的 if 块将始终为真。 但是当你想在没有 spaces 检查值的情况下检查要打印的 s 时: if( s[i] != ' ' ) print s [i];

此外,当您比较字符时,您应该明白," " 用于字符串,对于字符,您应该使用单引号 ' '。