在这里开始程序员......
我正在为我的计算机科学课写一个非常简单的程序,我遇到了一个我想更多了解的问题。这是我的代码:
#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封在单引号中解决了这个问题,或者该程序至少仍然有效。但是,正如我所说,我只是想明白我为什么会收到这个错误,这样我才能更好地理解我正在做的事情。
答案 0 :(得分:5)
您需要使用单引号。
在C,(和许多其他语言)中,character constant是单引号中包含的单字符 1 :
'U'
虽然string literal是双引号中包含的任意数量的字符:
"U"
您将courseLevel
声明为单个字符:char courseLevel;
因此,您只能将其与另一个char
进行比较。
执行if (courseLevel == "U")
时,左侧是char
,而右侧是const char*
- 指针到第一个char
1}}在该字符串文字中。你的编译器告诉你这个:
指针和整数('
之间的比较int
'和'const char*
')
所以你的选择是:
if (courseLevel == 'U') // compare char to char
或者,为了举例:
if (courseLevel == "U"[0]) // compare char to first char in string
注意完整性:您可以拥有mulit-character constants:
int a ='abcd'; // GCC中的0x61626364
但这肯定不是你想要的。
答案 1 :(得分:2)
拉普兹是对的,但我认为更多的阐述应该有所帮助...
courseLevel == "U"
在C和C ++中,双引号创建字符串文字 - 这是字符数组,以数字-0 ASCII-NUL终止哨兵字符结束,因此程序可以在文本结束的地方找到工作。所以,你基本上都在问一个字符是否等于一个字符数组......它们只是无法比较。类似的有效问题是:
courseLevel == 'U'
strchr(courseLevel, "U")
courseLevel == "U"[0]
当然,第一个是在你的程序中具有直观意义的那个。
答案 2 :(得分:1)
您收到错误的原因是因为C和C ++中的字符串文字以空终止字符\0
结尾,而单个字符不是。因此,当您将char
与字符串文字进行比较时,您需要将字符文字与字符数组{'U','\0'}
进行比较。