比较C中的字符读取指针和整数

时间:2015-07-12 12:21:12

标签: c comparison

我正在尝试比较if语句中的字符,然后在字母表中打印其位置的值。

我的代码是:

char a = 'a';
int value = 0;
if(a == "A" || a == "a"){
    value = 1;
}else if...

编译时我收到错误:warning: comparison between pointer and integer

if(a == "A" || a == "a"){
     ^

我得到的字符在 C 中存储为ASCII值,这意味着我可能会使用字符的整数值而这会起作用,但我想知道为什么不这样做? / p>

5 个答案:

答案 0 :(得分:7)

使用单引号:

if(a == 'A' || a == 'a' ){

双引号用于字符串文字。比较a == "A"时,将字符a与指针进行比较(即表达式中使用的字符串文字产生指向其第一个元素的指针)。因此,编译器发出诊断。它与"a"相同。

答案 1 :(得分:3)

"a"不是字符,而是字符串文字。

字符串本质上是以'\0'(空字符)结尾的字符数组。

您需要改为使用'a'

此外,没有必要使用这么多 if-else s

你可以用很短的代码来完成它:

if(a >= 'a')
   a-=('a'-'A');

value = a - 'A' + 1;

答案 2 :(得分:2)

查看变量a的定义以及如何查看其初始化程序

char a = 'a';

并将初始化程序与if语句中使用的文字进行比较

if(a == "A" || a == "a"){

肉眼可以看到'a'"a"看起来不一样。确实他们有不同的类型。

'a'是一个字符文字,类型为int

"a"是一个字符串文字,其类型为char[2],因为它包含两个字符'a'和终止零'\0'

您可以想象字符串文字的定义,如

char string_literal_a[2] = { 'a', '\0' };

没有从数组(字符串文字)到int(字符文字)的隐式转换。

因此在本声明中

if(a == "A" || a == "a"){

字符串文字的字符数组“A”和“a”被转换为指向类型为char *的表达式的第一个元素的指针,并且编译器发出警告,因为它怀疑您正在尝试执行此操作什么是错的,至少不是你想要的实际......

正确的条件可以按以下方式编写

if ( a == 'A' || a == 'a' ) {

如果表达式的结果是字符,则可以在条件中使用数组,但仅作为表达式使用下标运算符。例如

if ( a == "A"[0] || a == "a"[0] ){

if ( a == *"A" || a == *"a" ){

然而,尽管这些记录是正确的,但却让读者感到困惑。所以最好使用带有字符文字的记录

if ( a == 'A' || a == 'a' ) {

`

答案 3 :(得分:0)

您可以使用以下语法:

char a = 'a';
int value = 0;
if(a == 'A' || a == 'a')
{
    value = 1;
}

错误是由于检查字符('x')和“字符串”之间的相等性而产生的。

相反,您可以将a声明为char[](字符串),然后使用strcmp(str1,str2)函数在value中返回int:

value = strcmp(str1,str2);

此函数返回如下值:

如果返回值< 0然后它表示str1小于str2。

如果返回值> 0然后它表示str2小于str1。

如果返回值= 0则表示str1等于str2。

答案 4 :(得分:0)

#include <stdio.h>
int main(){
char a;
int value = 0;
printf("enter the character ");
scanf("%c",&a);

if(a == 'A' || a == 'a'){
    value = 1;
    printf("hi");
}
else {
    printf("hello");
}

}
相关问题