2

初级程序员在这里...

我正在为我的计算机科学课编写一个非常简单的程序,我遇到了一个我想了解更多的问题。这是我的代码:

#include <iostream>

using namespace std;

int main(int argc, const char * argv[])
{
    char courseLevel;

    cout << "Will you be taking graduate or undergraduate level courses (enter 'U'"
            " for undergraduate,'G' for graduate.";
    cin >> courseLevel;

    if (courseLevel == "U")
    {
        cout << "You selected undergraduate level courses.";
    }

    return 0;
}

我的 if 语句收到两条错误消息:1)未指定与字符串文字的比较结果(改用 strncmp)。2) 指针和整数的比较('int' 和 'const char*')。

我似乎已经通过将我的 U 用单引号括起来解决了这个问题,或者该程序至少可以正常工作。但是,正如我所说,我只是想了解为什么会出现错误,以便更好地了解我在做什么。

4

3 回答 3

5

您需要改用单引号。

在 C 语言(和许多其他语言)中,字符常量是包含在单引号中的单个字符1 :

'U'

虽然字符串文字是包含在双引号中的任意数量的字符:

"U"

您声明courseLevel为单个字符:char courseLevel;因此您只能将其与另一个 single 进行比较char

当您这样做if (courseLevel == "U")时,左侧是 a char,而右侧是 a const char*--指向char该字符串文字 中第一个的指针。你的编译器告诉你这个:

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


所以你的选择是:

if (courseLevel == 'U')       // compare char to char

或者,例如:

if (courseLevel == "U"[0])    // compare char to first char in string

  1. 完整性注意事项:您可以使用多字符常量

    int a = 'abcd'; // GCC 中的 0x61626364

但这肯定不是你要找的。

于 2013-02-07T05:12:20.350 回答
3

拉普茨是对的,但我认为更多的阐述应该会有所帮助......

courseLevel == "U"

在 C 和 C++ 中,双引号创建字符串字面量- 它是字符数组,以数字 0 ASCII-NUL 终止标记字符结尾,因此程序可以计算出文本结束的位置。所以,你基本上是在问一个字符是否等于一个字符数组......它们只是无法比较。类似的有效问题是:

  • 此字符变量是否保存特定的字符值: courseLevel == 'U'
  • 此字符变量是否出现在特定数组中: strchr(courseLevel, "U")
  • 此字符变量是否匹配特定数组中的第一个元素: courseLevel == "U"[0]

当然,其中第一个是在您的程序中具有直观意义的那个。

于 2013-02-07T05:17:20.313 回答
1

您收到错误的原因是因为 C 和 C++ 中的字符串文字以空字符结尾,\0而单个字符则没有。因此,当您将 achar与字符串文字进行比较时,您是将字符文字与 char 数组进行比较{'U','\0'}

于 2013-02-07T05:08:57.917 回答