2015-07-05 3 views
-3

Я работаю через некоторые онлайн-уроки. Я не могу понять, почему оператор выбора IF не работает?инструкция выбора IF не будет работать?

#include <stdio.h> 

int main(){ 
    char namedata[50], names; 
    int n; 
    printf("Enter Number of family members being enter into program \n"); 
    scanf("%d", &n); 
    for (names=0; names<n; ++names) 
    { 

     printf("Enter family member name:\n"); 
     scanf("%s", &namedata); 
     printf("name:"); 
     puts(namedata); 

    } 
    if (namedata = john) 
    { 
     prinf("john is cool"); 
    } 
    return 0; 
} 
+2

У вас есть опечатка; вы устанавливаете 'namedata' значение' john', не сравнивая их ('=='). –

+0

также должен использовать строковое значение ('' john ''), а не имя объекта ('john'). – wilcroft

+2

Также переменные 'names' должны быть' int' not 'char'. – Wazaaaap

ответ

2

Есть различные проблемы в вашем коде:

  • Вашего scanf является приглашением к непредсказуемому поведению, так как вы не ограничиваете количество символов для чтения. Что делать, если пользователь вводит более 49 символов?
  • Всегда проверяйте результат scanf.
  • names Должно быть int.
  • john должно быть "john".
  • FYI: Оператор сравнения ==, не =. Ваш компилятор должен действительно жаловаться! Если это не так, включите предупреждения и скомпилируйте с помощью -std=c99 (gcc).

Основной вопрос: Вы не можете сравнивать строки, как, что в C. Используйте strcmp - только если строки являются безопасными, иначе использовать один из самых безопасных вариантов.

Для спецификатора формата scanf%49s, чтобы ограничить ввод допустимым диапазоном.

0

namedata - это массив символов (может быть назван как строка), и ур сравнивает его со строкой с именем john. Сначала john - это строка, поэтому вы не можете ее написать напрямую, она должна быть с: - "" двойные кавычки, Ans во-вторых, в c вы не можете сравнивать напрямую, есть встроенная функция strcmp(), если она возвращает 0, тогда строки равны. В качестве аргумента требуется две строки, которые нужно сравнить. Вы можете изучить больше о нем - LINK: - strcmp

Еще одна вещь, что% s не принимает фиксированный размер, так что используйте («% S», символ имени массива), а не как («% s», & имя массива), не используйте & оператор с% s.

+0

Я думаю, что я понимаю strcmp(), но я не вижу, как я могу использовать его для сравнения ввода пользователя. Пример, если введенное имя является john, тогда он будет печатать john is cool ... –

+0

if (strcmp (namedata, «john») == 0) { prinf ("john is cool"); } Надеюсь, это может вас удовлетворить .Happy Coding ;-) –

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