C语言,在if-else语句中为char赋值?

时间:2016-02-21 12:36:14

标签: c dev-c++

我正在尝试使用这样的定义

`printf ("1st Account:");
scanf("%i",&AN1);
printf ("Value of 1st Account:");
scanf("%f",&VAN1);
printf ("2nd Account:");
scanf("%i",&AN2);
printf ("Value of 2nd Account:");
scanf("%f",&VAN2);
system("pause");
system("cls");
if (AN1==101)
#define CAN1 "Cash"
else if (AN1==102)
#define CAN1 "Accounts Receivable"
else if (AN1==104)
#define CAN1 "Notes Receivable"`

等等

显然,它没有用,因为define是针对整个程序的,并且不是只在if语句中读取的。

有谁知道如何让它发挥作用? 我需要稍后再显示它

`printf ("Your 1st account name is: %s with the value of %.2f.\n",CAN1,VAN1);
printf ("Your 2nd account name is: %s with the value of %.2f.\n",CAN2,VAN2);`

3 个答案:

答案 0 :(得分:1)

使用变量而不是define:

 const char *can1 ="unknown";

 if (AN1==101)
    can1 = "Cash";
else if (AN1==102)
     can1 = "Accounts Receivable";
else if (AN1==104)
    can1 = "Notes Receivable";

define在编译时处理,而您的值仅在运行时知道。

答案 1 :(得分:1)

正如您所正确观察到的那样,#define语句和预处理程序指令通常在编译之前进行评估。预处理器处理文件,输出预处理的文件,并将其传递给编译器,编译器最终生成目标文件和/或可执行文件。
预处理器没有范围,大括号,语法或语言结构的概念。它只解析源文件,替换宏出现,并执行其他元数据。

作为替代,您可以使用字符串文字:

const char* ptr;

if (that)
    ptr = "that";
else
    ptr = "else";

字符串文字不能超出范围,因为它们存在于程序的整个运行时;它们通常存储在可执行文件的核心映像中。

答案 2 :(得分:1)

define在编译时在预处理中处理。您不能在运行时有条件地定义事物。

您可以通过以下方式将常量指定给指针:

#include <stdio.h>

int main(void) 
{

char *can1;
int an1 = 0;

if (an1 == 0) 
    can1 = "Cash";
else if (an1 == 102)
    can1 = "Accounts Receivable";
else if (an1 == 104)
    can1 = "Notes Receivable";

printf("%s\n", can1);
}