2015-06-13 5 views
0

Я пытаюсь сделать базовый оператор if, и я получаю эту странную ошибку с моей строкой.Weird error, сравнивая char с строкой (p == "cancel")

Ошибка 1:

Сравнение между указателем и целого числа ('INT' и 'символ *')

Ошибка 2:

результат сравнения с строкового литерала не используется (используется strncmp)

Вот копия функции все происходит.

int logOn(int *par) 
{ 
    char p; 
    printf("Log into student records system\nEnter password or type cancel to leave\n>"); 
    scanf("%s", &p); 

     if(p == *PASSWORD1 | p == *PASSWORD2 | p == *PASSWORD3) 
     { 
      *par = 2; 
     } 
     else if (p = "cancel") 
     { 
      *par = 3; 
     } 
     else 
     { 
      printf("\nIncorrect password try again\n"); 
     } 

    return 0; 
} 

ошибка происходит на линии else if операторов (p = "cancel").

+2

p = "cancel" присваивает "отменить" на p вместо сравнения. Измените его на p == "cancel" – user2182349

+0

'==' как указано выше. Кроме того, 'p' является' char', '" cancel "' является символом 'char *', они не будут равны. Вы имеете в виду 'p', чтобы быть' char * '? Вы должны использовать 'strcmp', чтобы сравнить строки. – twentylemon

+0

Этот код предназначен для неопределенного поведения. Вы читаете строку символов через '% s' в * single *' char'. Имея только пространство для одного элемента (и это лучше * - это оконечный терминатор nullchar), это означает, что 'scanf' будет действителен только в том случае, если в результате чтения строки не будет * length *. – WhozCraig

ответ

7

Здесь несколько вещей не так.

  1. Для сравнения значений используйте == не =.
  2. Оператором является или Оператор: || не |.
  3. char p имеет место для одного персонажа. Вы не можете хранить многосимвольный пароль в переменной char. Вам понадобится строка.
  4. Вы не можете сравнить строки с ==. p == *PASSWORD1 не будет работать. Я оставлю это вам, чтобы выяснить, что работает. Его достаточно легко найти.
1

Какая функция, используемая для сравнения строк, заключается в ошибке, созданной самим компилятором. (найдите функцию по ошибке № 2, которую вы опубликовали, и Google для нее.)

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