C编程语言:if语句与字符无法正常工作

时间:2015-02-28 12:07:30

标签: c if-statement chars

我正在尝试让这个程序说得好,但它说的还好 虽然我使变量值与if测试值相同

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char history[200];
    history == "NY school";

    if(history == "NY school")
    {
        printf("good");
    }
    else{printf("okay");}
    return 0;
}

4 个答案:

答案 0 :(得分:5)

您需要使用函数strcmp

  if (strcmp(history ,"NY school") == 0) ....

否则你正在比较指针

加上改变

  history == "NY school";

使用strcpy

答案 1 :(得分:2)

这应该适合你:

#include <stdio.h>
#include <string.h>
        //^^^^^^^^ Don't forget to include this library for the 2 functions

int main() {  

    char history[200];
    strcpy(history, "NY school");
  //^^^^^^^Copies the string into the variable
    if(strcmp(history, "NY school") == 0) {
     //^^^^^^ Checks that they aren't different
        printf("good");
    } else {
        printf("okay");
    }

    return 0;

}

有关strcpy()的详情,请参阅:http://www.cplusplus.com/reference/cstring/strcpy/

有关strcmp()的详情,请参阅:http://www.cplusplus.com/reference/cstring/strcmp/

答案 2 :(得分:1)

无法分配字符串(使用单个=,而不是代码中使用==。在标准标题strcpy()中查找<string.h>函数。

此外,使用关系运算符(==!=等)无法比较字符串(或任何数组) - 这种比较比较指针(第一个元素的地址)数组)不是字符串的内容。要比较字符串,请再次在strcmp()

中使用<string.h>函数

答案 3 :(得分:-1)

通过一些实现定义的优化运气,这也可以起作用:

#include <stdio.h>

int main(void)
{
  char * history = "NY school";

  if (history == "NY school") /* line 7 */
  {
    printf("good");
  }
  else
  {
    printf("okay");
  }

  return 0;
}

至少它在gcc (Debian 4.7.2-5) 4.7.2编译时有效,没有优化btw。

上面显示的代码打印:

good

在编译期间,它会触发警告(对于第7行):

 warning: comparison with string literal results in unspecified behavior [-Waddress]