2014-10-19 1 views
0

У меня возникла проблема с моим кодом. Дело в том, что мне нужно сравнить два символа n и a[p], но результат всегда отрицательный. Это небольшая программа викторины для моего задания. q[] - это массив вопросов, и a[] - это массив ответов. Игрок вводит t или f за true или false, но if, похоже, не работает, поскольку он всегда печатает «Вы проигрываете!». (даже если условие верно).Сравнение символов в C, if-statement

char questions(){ 
const char *q [100]; 
q[0]= "Centipedes always have 100 feet."; //f 
q[1] = "Marie Curie’s husband was called Pierre."; //t 
[...] 
q[99] = ""; 

const char *a[100]; 
a[0] = "f"; 
a[1] = "t"; 
[...] 
a[99] = ""; 

char n; 
int p, i; 
for (i = 0; i<=7; ++i) 
{ 
    srand(time(NULL)); 
    p = (rand() % 18); 

    printf("\n"); 
    printf(q[p]); 
    printf("\n"); 

    fflush(stdin); 
    scanf("%c", &n); 

    if (n == a[p]){ 
     printf("Correct answer!\n"); 
    } 
    else 
    { 
     printf("You lose!"); 
     break; 
    } 

} 
+2

', если (п == а [P]) {' -> ', если (п == * а [р]) {' – BLUEPIXY

+2

ты должен прислушаться предупреждения Твоих , –

+0

** Примечание: ** 'fflush (stdin);' does ** Not ** удалить посторонние символы из 'stdin'. Вам нужно вручную удалить любые посторонние символы с чем-то похожим на 'int flush = 0; ', после чего/перед чтением из' stdin' во второй раз включайте 'do {flush = getchar(); } while (flush! = '\ n'); '. Это выполнит то, что вы ** не выполняете ** с 'fflush (stdin);'. –

ответ

3

Похоже, что вы выделили a как массив символьных указателей (т.е. массив из с строк) вместо того, чтобы массив символов:

const char *a[100]; 

Попробуйте выделить массив символов вместо массива символьных указателей и инициализировать значения в качестве символов вместо с строк:

  • const char *a[100]; становится char a[100]; - не забудьте опустить const, так как вы записать значения в массив позже.

  • a[0] = "f"; становится a[0] = 'f';

+0

Ваше решение работает с небольшим исправлением - мне пришлось изменить его из 'const char * a [100];' to 'char a [100];', потому что когда я его оставил 'const char a [100];' файл не будет компилироваться с присваиванием ошибки «только для чтения». Когда я сменил его, программа сразу скомпилировалась. Спасибо за вашу помощь! – dgabka95

+0

А, конечно, я пропустил это - извините. Я соответствующим образом обновлю ответ. Благодарю. –

1

Ваш тест неверен. Вы в настоящее время тестируют char против char * ...

Два пути исправления:

  1. объявить как массив символов не char *. char a[100]; затем инициализировать их с a[0]='f';
  2. или изменить тест на if (n==a[p][0]) так, что вы проверить n против первого символа в р-й строки
Смежные вопросы