首页 > 解决方案 > 在 if 语句中定义变量

问题描述

代码思想是从标准输入中读取单个字符。如果读取“y”或“n”,程序应分别打印“YES!”或“NO!”。

我试图在一个块中使用#define指令:if

#include <stdio.h>
#include <stdbool.h>

#define YES y 
#define NO n

int main()
{
    char letter = ' ';
    printf("for Yes enter : y\nfor No enter : n\n");
    letter = getchar();
    if (YES == letter)
    {
        printf("YES!");
    }
    else if (NO == letter)
    {
        printf("NO!");
    }
    else
    {
        printf("this option is not available");
    }
    printf("FUZZY");
    
    getchar();
    return 0;
}

这会导致以下错误:

Ex1.c: In function 'main':
Ex1.c:5:13: error: 'y' undeclared (first use in this function)
 #define YES y
             ^
Ex1.c:13:5: note: in expansion of macro 'YES'
  if(YES == letter)
     ^~~
Ex1.c:5:13: note: each undeclared identifier is reported only once for each function it appears in
 #define YES y
             ^
Ex1.c:13:5: note: in expansion of macro 'YES'
  if(YES == letter)
     ^~~
Ex1.c:6:12: error: 'n' undeclared (first use in this function)
 #define NO n
            ^
Ex1.c:17:10: note: in expansion of macro 'NO'
  else if(NO == letter)

该怎么做才能使此代码正常工作?

标签: cif-statementvariableschar

解决方案


“未声明”错误的原因:预处理阶段if语句将变为:

  1. if(YES == letter)更改为if(y == letter)

  2. else if(NO == letter)更改为else if(n == letter)

这两个语句是经过预处理的编译阶段的输入。显然,y变量n没有被声明。因此,错误。

解决方案 :

#define YES 'y' 
#define NO 'n'

这些更改后if的语句将是(在预处理阶段之后):

  1. if(YES == letter)更改为if('y' == letter)

  2. else if(NO == letter)更改为else if('n' == letter)

在这里,'y'and'n'是字符常量,而不是变量。因此,您不会收到“未声明”的错误。


推荐阅读