C语言中的字符比较,if语句

时间:2014-10-19 19:03:22

标签: c if-statement comparison

我的代码遇到了这个问题。问题是我需要比较两个字符na[p],但结果总是否定的。这是我的作业的一个小测验计划。 q[]是一系列问题,a[]是一系列答案。播放器输入tf表示真或假,但if似乎无法正常工作,因为它始终打印“你输了!”#39; (即使条件为真)。

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 个答案:

答案 0 :(得分:3)

看起来您将a分配为字符指针数组(即c字符串数组)而不是字符数组:

const char *a[100];

尝试分配一个字符数组而不是一个字符指针数组,并将您的值初始化为字符而不是c字符串:

  • const char *a[100];变为char a[100]; - 请勿忘记删除const,因为您稍后会将值写入数组。

  • a[0] = "f";变为a[0] = 'f';

答案 1 :(得分:1)

你的测试是错误的。您目前正在针对char ...

char *进行测试

两种纠正方法:

  1. 将a声明为不是char *的字符数组。 char a[100];然后使用a[0]='f';
  2. 初始化它们
  3. 或将您的测试更改为if (n==a[p][0]),以便针对第p个字符串的第一个字符测试n