首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将值作为字符串存储在C中的if语句中

将值作为字符串存储在C中的if语句中
EN

Stack Overflow用户
提问于 2013-03-19 02:37:32
回答 2查看 631关注 0票数 0

我有一些if、else if和else语句的代码,这些语句计算一些不等式。

我的问题是:如何将语句(在本例中为单原子、双原子、多原子)的结果赋给一个字符串变量,以便以后可以使用此变量注释图形

代码语言:javascript
复制
/* 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");

如您所见,目前我只能打印出结果。但这并不能让我在以后使用结果。

EN

回答 2

Stack Overflow用户

发布于 2013-03-19 02:40:36

使用变量存储此信息:

代码语言:javascript
复制
#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);
票数 2
EN

Stack Overflow用户

发布于 2013-03-19 03:20:04

您可以使用一个枚举来表示gastypes,并使用一个描述字符串数组来表示可打印的内容。将结果状态存储为整数/枚举的优点在于,它可以容易地进行比较,例如,在switch中使用。相比之下,比较字符串有点麻烦。

下面是一个使用X-Macros的示例实现

代码语言:javascript
复制
#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;
    }
}

因此,在实际编译之前,预处理器将枚举和描述字符串数组的定义扩展为以下内容:

代码语言:javascript
复制
typedef enum {
    MONOATOMIC,
    DIATOMIC,
    POLYATOMIC,
} gastype_t;

const char const * gastype_str[] = {
    "MONOATOMIC",
    "DIATOMIC",
    "POLYATOMIC",
};

使用示例:

代码语言:javascript
复制
$ gcc test.c && echo "1.4" | ./a.out
This gas is DIATOMIC
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15484327

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档