2015-02-28 3 views
1

Я пытаюсь сделать эту программу прощаться, но она говорит, что все в порядке, а не , хотя я сделал переменное значение, такой же из, если тестового значенияC Язык программирования: если операторы не правильно работать с символами

#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; 
} 
+6

Используйте '' strcpy' и strcmp' для назначения и сравнения строк –

+0

Вы сравниваете указатели, следовательно, ошибку. Также 'man 3 strcmp'. – haziz

ответ

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/

+0

спасибо, что мне очень помогло :) –

+0

@talalalsharaa Добро пожаловать! Хороший день: D (BTW: вы можете принять ответ, как вам больше всего помогли и решили вашу проблему!) (Http://meta.stackexchange.com/q/5234)) – Rizier123

+0

Просто делайте 'char history [200] = «Школа в Нью-Йорке», также работает. – alk

5

вы должны использовать функцию strcmp

т.е.

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

в противном случае вы сравниваете указатели

Plus изменить

history == "NY school"; 

использовать strcpy

1

Строки не могут быть назначены (что должно было бы использовать один =, а не ==, как в вашем коде). Посмотрите функцию strcpy() в стандартном заголовке <string.h>.

Кроме того, строки (или любые массивы, если на то пошло) не могут сравниваться с использованием операторов реляций (==, != и т. Д.) - такие сравнения сравнения указателей (адрес первого элемента массива), а не содержимое строки. Чтобы сравнить строки, используйте функцию strcmp(), снова в <string.h>.

-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, без оптимизации кстати.

Код, приведенный выше принтами:

good 

Во время компиляции он однако вызывает предупреждение (для линии 7):

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

Как указывали другие комментарии и ответы, строки нельзя сравнивать с помощью оператора ==. Необходимо использовать функцию strcmp() (которая объявляется в стандартном заголовке ). – Rob

+0

@Rob: Код, который я показываю, не сравнивает «строки», а указывает на них. – alk

+1

Правильно. Проблема в том, что нет гарантии, являются ли эти указатели равными или неравными. – Rob

Смежные вопросы