我想取一个字符串并输出没有空格。我编写了下面的代码,但我的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
答案 0 :(得分:0)
需要注意的重要一点是双引号字符实际上是字符串,而不是字符类型。该值将存储器地址保存到程序存储器中的某个位置(不是堆栈上的值),该位置恰好是2个字节长(一个用于空间,一个用于\0
)。所以#1:将"
更改为'
,并且您在堆栈中只有一个字符,可以按值进行比较。
第二个是通过在那里使用&
符号,你试图比较字符串中i
索引的地址,而不是那里的值。只需删除&
。
答案 1 :(得分:0)
是的,你是对的。你的if条件总是如此,因此,你将最终按原样打印整个字符串
你的条件:
if( &s[i] != ' ' ) print s [i];
这里“&amp;”代表地址。因此,在您的if块中,您要检查的是:
` if(addressof( s[i] != ' ') print s[i]; `
现在地址永远不会是空间,因此你的if块将永远为真。
但是,如果您想要检查没有空格的s,请检查值:
if( s[i] != ' ' ) print s [i];
另外,正如你在比较charecter时,你应该明白,“”用于字符串,对于字符,你应该使用单引号''。