我有一些if、else if和else语句的代码,这些语句计算一些不等式。
我的问题是:如何将语句(在本例中为单原子、双原子、多原子)的结果赋给一个字符串变量,以便以后可以使用此变量注释图形
/* Determine the type of gas - theoretical gamma for:
- monoatomic = 1.66
- diatomic = 1.4
- polyatomic = 1.33 */
if (gamma <=1.36)
printf("This gas is POLYATOMIC\n");
else if (gamma > 1.36 && gamma <= 1.5)
printf("This gas is DIATOMIC\n");
else
printf("This gas is MONOATOMIC\n");如您所见,目前我只能打印出结果。但这并不能让我在以后使用结果。
发布于 2013-03-19 02:40:36
使用变量存储此信息:
#define POLYATOMIC 3
#define DIATOMIC 2
#define MONOATOMIC 1
#define INVALID 0
int atomicity = INVALID;
const char* gasTypeName = "ERROR";
if (gamma <=1.36)
{
atomicity = POLYATOMIC;
gasTypeName = "Polyatomic";
}
else if (gamma > 1.36 && gamma <= 1.5)
{
atomicity = DIATOMIC;
gasTypeName = "Diatomic";
}
else
{
atomicity = MONOATOMIC;
gasTypeName = "Monoatomic";
}
printf("The gas is %s", gasTypeName);发布于 2013-03-19 03:20:04
您可以使用一个枚举来表示gastypes,并使用一个描述字符串数组来表示可打印的内容。将结果状态存储为整数/枚举的优点在于,它可以容易地进行比较,例如,在switch中使用。相比之下,比较字符串有点麻烦。
下面是一个使用X-Macros的示例实现
#include <stdio.h>
#define GASTYPES \
ENTRY(MONOATOMIC) \
ENTRY(DIATOMIC) \
ENTRY(POLYATOMIC)
typedef enum {
#define ENTRY(x) x,
GASTYPES
#undef ENTRY
} gastype_t;
const char const * gastype_str[] = {
#define ENTRY(x) #x,
GASTYPES
#undef ENTRY
};
int main() {
double gamma;
gastype_t gastype;
if(scanf("%lf", &gamma)) {
if (gamma <= 1.36)
gastype = POLYATOMIC;
else if (gamma <= 1.5)
gastype = DIATOMIC;
else
gastype = MONOATOMIC;
printf("This gas is %s\n", gastype_str[gastype]);
return 0;
}
else {
printf("Failed to parse input :(\n");
return -1;
}
}因此,在实际编译之前,预处理器将枚举和描述字符串数组的定义扩展为以下内容:
typedef enum {
MONOATOMIC,
DIATOMIC,
POLYATOMIC,
} gastype_t;
const char const * gastype_str[] = {
"MONOATOMIC",
"DIATOMIC",
"POLYATOMIC",
};使用示例:
$ gcc test.c && echo "1.4" | ./a.out
This gas is DIATOMIChttps://stackoverflow.com/questions/15484327
复制相似问题