【问题标题】:Defining variables inside if-statement在 if 语句中定义变量
【发布时间】:2023-03-19 05:42:02
【问题描述】:

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

我尝试在 if 块中使用 #define 指令:

#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)

如何使这段代码工作?

【问题讨论】:

  • 完全你定义的宏替换宏,然后问问自己这是否有意义。 IE。 if (y == letter) ???你不是说if ('y' == letter) 吗?
  • 你正在输入一个字符并且你已经定义了一个变量的别名

标签: c if-statement variables char


【解决方案1】:

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

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

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

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

解决方案:

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

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

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

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

这里,'y''n' 是字符常量,而不是变量。所以,你不会得到“未声明”的错误。

【讨论】:

    【解决方案2】:

    首先,您应该删除 #include

    其次,在你的定义中,你将 y 和 x 声明为变量而不是字符,要声明为字符,你应该这样:'x','y'

    #include <stdio.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("\nFUZZY");
        getchar();
        return 0;
    }
    

    【讨论】:

      【解决方案3】:

      你应该把y和n当作字符'y'和'n'

      【讨论】:

        猜你喜欢
        • 2017-03-21
        • 1970-01-01
        • 2020-08-31
        • 1970-01-01
        • 1970-01-01
        • 2013-02-28
        • 1970-01-01
        • 2023-02-10
        • 2013-09-17
        相关资源
        最近更新 更多