用C语言定义一个变量(例如:#define PRE_WORD 1),然后在以后使用该数字?

用C语言定义一个变量(例如:#define PRE_WORD 1),然后在以后使用该数字?,c,C,我定义了一组状态,将我要分析的文本分类如下: #define PRE_WORT 0 #define IN_WORT 1 #define NO_WORT 2 #define WS_L 3 #define WS_T 4 #define BU 5 #define ZIFF 6 #define SONST 7 然后,我尝试找出文本中有多少单词、多少行、最长单词和最长行,这些内容由用户输入,并通过getchar()进行扫描 为了计算一行中的字符数,我将行计数器中字符的值设置为0 if (characte

我定义了一组状态,将我要分析的文本分类如下:

#define PRE_WORT 0
#define IN_WORT 1
#define NO_WORT 2
#define WS_L 3
#define WS_T 4
#define BU 5
#define ZIFF 6
#define SONST 7
然后,我尝试找出文本中有多少单词、多少行、最长单词和最长行,这些内容由用户输入,并通过
getchar()
进行扫描

为了计算一行中的字符数,我将行计数器中字符的值设置为0

if (character=='\n') {
        line++;
        if (count_char_line>=char_line_max) {
            char_line_max=count_char_line;
            count_char_line=0;
                                    }
        else {count_char_line=0;}
我这样做对吗?或者我只是将
count\u char\u line
的状态设置为
PRE\u WORT

\35; define
是代码中的简单替换。在本例中,您将变量
count\u char\u line
设置为0。你所做的:

  count_char_line=0;
会很好用的。你可以很容易地做到:

  count_char_line=PRE_WORT;
它们的结果与编译器的结果完全相同,并将
PRE_-WORT
的任何实例替换为数字0

选择一个而不是另一个的唯一原因是为了让阅读它的人更清楚,或者如果这是一个在许多地方经常使用的值,并且可能会发生变化(最好为硬编码常量设置变量);但你真的可以决定用什么


就您的代码而言,它看起来会做您想要的事情(据我所知,您的要求是什么),但这有点过头了。如果
if
中的代码与
else
中的代码相同,通常可以将其简化为:

if (character=='\n') {
        line++;
        if (count_char_line>=char_line_max) {
            char_line_max=count_char_line;
        }
        count_char_line=0;
任何时候你做一个#define,它所做的就是告诉编译器查找该字符串,并用后面的值替换该字符串。(还有更多内容,请仔细阅读有关宏的内容,但出于您的目的,这就是它的作用)

因此,如果“设置状态”的意思是“count\u char\u line==PRE\u WORT”,那么是的。但在编译之后,它会被解释为“count\u char\u line==0”,所以实际上没有太多的“state”


“#define”用于简单地定义某些常量,这些常量在特定上下文中具有某种含义。你还没有真正定义它所使用的上下文,所以我不确定你是否正确,但乍一看,状态(#define)让我很困惑,但“char#line_max”代码看起来应该可以工作。你有什么问题?你的问题不清楚。您没有使用任何已定义的
宏。另外,你的大括号看起来有点不匹配。看看教程tooHi,谢谢你的回答和编辑meagar。我现在明白了我的错误所在,最大的问题是,我试图在需要int的函数和环境中使用pre_state等类别。下一次我还将发布我在问题中实际使用的代码位。当Richard说我的char_line_max代码应该可以正常工作时,我知道该去哪里找。谢谢谢谢一个枚举类型定义会更清晰:
enum state{pre_-wort,in_-wort,no_-wort,ws_-l,ws_-t,bu,ziff,sonst}