c - 在 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)
该怎么做才能使此代码正常工作?
解决方案
“未声明”错误的原因:预处理阶段if
语句将变为:
if(YES == letter)
更改为if(y == letter)
else if(NO == letter)
更改为else if(n == letter)
这两个语句是经过预处理的编译阶段的输入。显然,y
变量n
没有被声明。因此,错误。
解决方案 :
#define YES 'y'
#define NO 'n'
这些更改后if
的语句将是(在预处理阶段之后):
if(YES == letter)
更改为if('y' == letter)
else if(NO == letter)
更改为else if('n' == letter)
在这里,'y'
and'n'
是字符常量,而不是变量。因此,您不会收到“未声明”的错误。
推荐阅读
- c# - C# 中 Pipeline 和 PowerShell 类的区别
- excel - excel公式,按月求和错误
- angular - 离子填充SVG根据选择动态
- spring-boot - spring boot 悲观锁如何实现,乐观锁好还是悲观锁好?
- python - 您如何恢复或自动排列窗口并启动虚拟环境以使用 Ubuntu 进行开发?
- python - SqlAlchemy 无法在未映射的子类上设置属性
- java - 调用 OnFailure 并抛出 IOException 但已发布数据
- django - 创建无法访问管理站点的超级用户
- sql - SQL 查询以计算采用初始输入的运行计数
- reactjs - React Native - 如何列出我自己的组件道具的建议?