2015-06-19 4 views
-4

Так что я пытаюсь изучить c, однако я не могу понять, почему этот код не будет работать должным образом.C не может понять, если заявление

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

int main() 
{ 
    char userName[25]; 
    char myName[25] = "myName"; 

    printf("Please enter your name: \n"); 
    scanf("%s", userName); 

    if(userName == myName) 
    { 
     printf("Congratulations your name is myName!!!"); 
    } 
    else 
    { 
     printf("Your name is %s how disappointing...", userName); 
    } 


    return 0; 
} 

Проблема в том, что утверждение if никогда не возвращает true. Может ли кто-нибудь помочь мне с этим?

+0

Пожалуйста, правильно отформатируйте свой код. – Olaf

+0

Урок, char username [25] объявляет указатель, char myName [25] объявляет другой указатель, указывая на два разных места в памяти (в этом случае в стеке), поэтому указатели никогда не равны (содержимое каждого ячейка памяти может быть одинаковой, но ** память ** должна сравниваться, а не ** указатели **) – Les

+0

относительно этой строки: 'scanf ("% s", userName);' Этот вызов scanf() позволяет пользователю перехватить буфер userName []. предложите: «scanf («% 24s », userName); И проверьте возвращаемое значение из scanf() (а не значения параметра), чтобы убедиться, что операция прошла успешно. – user3629249

ответ

3

Эта линия сравнения местоположения из строк, которые отличаются, так как вы сравниваете две разные строки.

if(userName == myName) 

Правильный тест на C - это использование библиотечной функции.

#include <string.h> 
... 
if(strcmp(userName,myName) == 0) 
+0

Спасибо, я понимаю это сейчас. – Meikk99

+0

@ Meikk99, Weather Vane - это правильно. Проверьте все ответы на свой вопрос и примите их (нажмите на значок галочки слева от ответа). Хороший ответ, +1. :) – gsamaras

+0

в порядке сделаем спасибо за быстрый ответ – Meikk99

0

Заявление if(userName == myName) не будет работать так, как вы ожидаете. Используйте функцию strcmp() для сравнения двух строк.

0

Использовать strcmp/strncmp, указанный в string.h, для сравнения строк; в вашей программе значения, которые вы сравниваете (после преобразования), являются значениями указателя.

1

В C вы должны использовать strcmp() для сравнения двух строк.

Так это изменить:

if(userName == myName) 

к этому:

if(strcmp(userName,myName) == 0) 
1

Вы не можете сравнивать такие строки. То, что вы делаете, это сравнение указателей с соответствующими укусами (которые, очевидно, разные). Так,

userName == myName 

не будет работать здесь. Вы можете использовать строковые функции для сравнения двух строк.

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