【问题标题】:Char comparison in C, if-statementC中的字符比较,if语句
【发布时间】:2014-10-19 19:03:21
【问题描述】:

我的代码有这个问题。问题是我需要比较两个字符 na[p] 但结果总是否定的。这是我的作业的一个小测验程序。 q[] 是一组问题,a[] 是一组答案。玩家输入tf 判断真假,但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;
    }

}

【问题讨论】:

  • if (n == a[p]){ --> if (n == *a[p]){
  • 你应该注意你的警告。
  • 注意: fflush(stdin); stdin 中删除无关字符。您需要手动删除任何与int flush=0; 类似的无关字符,然后在第二次从stdin 读取之后/之前包括do { flush=getchar(); } while (flush != '\n');。这将完成您对fflush(stdin); 实际所做的事情。

标签: c if-statement comparison


【解决方案1】:

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

const char *a[100];

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

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

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

【讨论】:

  • 您的解决方案实际上只需要一个小修复 - 我必须将它从 const char *a[100]; 更改为 char a[100];,因为当我离开它时 const char a[100]; 文件不会编译并出现错误“赋值”的只读位置”。当我更改它时,程序立即编译。感谢您的帮助!
  • 啊,当然,我错过了那个 - 很抱歉。我会相应地更新答案。谢谢。
【解决方案2】:

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

两种纠正方法:

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

【讨论】:

    猜你喜欢
    • 2018-10-15
    • 1970-01-01
    • 1970-01-01
    • 2016-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多