一切都在我的代码中工作,但一旦用户输入"BYE"我的程序没有结束,我不知道为什么while循环没有响应那个代码
#include "stdio.h"
#include <string.h>
int main(void)
{
char ch[20];
while (ch != "bye")
{
scanf("%s", ch);
int i;
int n = strlen(ch);
int c = 0;
for (i = 0; i < n / 2; i++)
{
if (ch[i] == ch[n - i - 1])
c++;
}
if (c == i)
{
printf("1");
}
else
{
printf("0");
}
}
return 0;
}
对于初学者,数组ch
没有初始化,即最初它不包含字符串
char ch[20];
其次,在while循环条件
中while (ch != "bye")
比较了两个地址:数组ch
的第一个元素的地址和字符串字面值"bye"
的第一个元素的地址。由于数组和字符串字面值占用不同的内存区域,所以地址总是不相等的。因此,你得到了一个不包含break语句的无限循环。
如果要比较字符串,则需要使用标准字符串函数strcmp
,例如
if ( strcmp( ch, "bye" ) == 0 )
{
//...
}
在这种情况下,数组ch
应该已经包含了一个字符串。
因此,代替while语句,最好使用do-while语句或无限while语句,如果strcmp
将返回0,则该语句将通过break语句中断。
例如
while ( 1 )
{
char ch[20];
scanf("%19s", ch );
if ( strcmp( ch, "bye" ) == 0 ) break;
size_t n = strlen(ch);
size_t i = 0;
while ( i < n / 2 && ch[i] == ch[n - i - 1] ) ++i;
if ( i == n / 2 )
{
printf("1");
}
else
{
printf("0"); }
}
}