2014-10-19 69 views
0

我的代码存在这个问题。事情是我需要比较两个字符na[p],但结果总是负面的。这是我的任务的一个小测验计划。 q[]是一组问题,a[]是一组答案。玩家输入tf为true或false,但if似乎不起作用,因为它总是打印出'你输了!'。 (即使条件是真的)。C语言中的char比较if语句

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

'如果(N ==一个[P]){' - >'如果(N == *一个[P]){' – BLUEPIXY 2014-10-19 19:06:17

+2

你应注意你的警告。 – 2014-10-19 19:10:25

+0

**注意:**'fflush(stdin);'** **不**从'stdin'移除多余的字符。你需要手动移除任何与'int flush = 0;'类似的无关字符,然后在从stdin读取之前/之后第二次包含'do {flush = getchar(); } while(flush!='\ n');'。这将完成你是**,而不是**用'fflush(stdin);'实现。 – 2014-10-19 19:10:43

回答

3

它看起来的第一个字符就像你分配a为字符指针数组(即C字符串的阵列)代替字符数组:

const char *a[100]; 

尝试分配字符,而不是字符指针数组的数组,并初始化值作为字符,而不是C字符串:

  • const char *a[100];变得char a[100]; - 不要忘记砸const因为你写的值传送到阵列以后。

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

+0

你的解决方案实际上适用于一个小问题 - 我必须将它从const char * a [100];改为'char a [100];',因为当我离开它'const char a [100];'该文件将不会编译时出现错误'只读位置的分配'。当我改变它的程序马上编译。谢谢你的帮助! – dgabka95 2014-10-22 20:45:43

+0

啊,当然,我错过了那个 - 对此感到遗憾。我会相应地更新答案。谢谢。 – 2014-10-22 20:55:47

1

你的测试是错误的。您目前正在测试charchar * ...

两种方法要正确:

  1. 声明作为一个字符不是char *的数组。 char a[100];然后用a[0]='f';
  2. 初始化它们或更改测试if (n==a[p][0])让你测试n对p个字符串