【问题标题】:Weird error, comparing a char to a string (p == "cancel")奇怪的错误,将字符与字符串进行比较(p == "cancel")
【发布时间】:2015-08-29 03:26:52
【问题描述】:

我正在尝试做一个基本的 if 语句,但我的字符串出现了这个奇怪的错误。

错误 1:

指针和整数的比较('int'和'char *')

错误 2:

与字符串文字的比较结果未指定(使用 strncmp 代替)

这里是所有函数的副本。

int logOn(int *par)
{
    char p;
    printf("Log into student records system\nEnter password or type cancel to leave\n>");
    scanf("%s", &p);

        if(p == *PASSWORD1 | p ==  *PASSWORD2 | p ==  *PASSWORD3)
        {
            *par = 2;
        }
        else if (p = "cancel")
        {
            *par = 3;
        }
        else
        {
            printf("\nIncorrect password try again\n");
        }

    return 0;
}

else if 语句行 (p = "cancel") 发生错误。

【问题讨论】:

  • p = "cancel" 将 "cancel" 分配给 p,而不是比较它。将其更改为 p == "取消"
  • == 如上所述。此外,pchar"cancel"char*,它们不会相等。你的意思是p 成为char* 吗?您应该使用 strcmp 然后比较字符串。
  • 该代码注定会出现未定义的行为。您正在通过 %s 将一串字符读入 single char。只有一个元素的空间(它更好是空字符终止符),这意味着scanf只有在读取的结果字符串没有长度时才有效。

标签: c if-statement char


【解决方案1】:

这里有很多问题。

  1. 要比较值,请使用== 而不是=
  2. 逻辑 or 运算符是 || 而不是 |
  3. char p 为单个字符腾出空间。您不能将多字符密码存储在 char 变量中。你需要一个字符串。
  4. 您无法将字符串与== 进行比较。 p == *PASSWORD1 不起作用。我会让你弄清楚什么是有效的。很容易搜索。

【讨论】:

    【解决方案2】:

    使用哪个函数比较字符串取决于编译器本身抛出的错误。 (查找您发布的第 2 号错误函数并在 Google 上查找。)

    【讨论】:

      猜你喜欢
      • 2022-11-22
      • 2011-09-18
      • 1970-01-01
      • 1970-01-01
      • 2012-05-12
      • 2011-04-07
      • 2014-09-25
      • 2010-10-14
      相关资源
      最近更新 更多