0

I have defined a set of states to categorize the text I want to analyse as follows:

#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

I then try to find out how many words, how many lines, longest word and longest line there are in the text, which is entered by the user and scanned via getchar().

To count the characters in a line, I set the value of characters in line counter to 0 by

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;}

Am I doing that right? Or am I just setting the state of count_char_line as PRE_WORT?

4

2 回答 2

2

#defines 是代码中的简单替换。在您的情况下,您将变量设置count_char_line为 0。您做了什么:

  count_char_line=0;

会工作得很好。你可以很容易地做到:

  count_char_line=PRE_WORT;

它们将产生与编译器完全相同的结果,并将任何实例替换PRE_WORT为数字 0。

选择一个而不是另一个的唯一原因是让阅读它的人更清楚,或者如果它是你在许多地方经常使用的值,可能会改变(总是有硬编码常量的变量);但这完全取决于您使用什么。


就你的代码而言,它看起来会做你想做的事情(据我所知你在问什么),但这有点矫枉过正。当您在 a 中拥有与if在 an中相同的代码时,else通常可以将其简化为:

if (character=='\n') {
        line++;
        if (count_char_line>=char_line_max) {
            char_line_max=count_char_line;
        }
        count_char_line=0;
于 2013-06-17T16:00:10.137 回答
0

任何时候你做一个#define,它所做的就是告诉编译器寻找那个字符串并用后面的任何值替换这个字符串。(还有更多内容,请阅读有关宏的信息,但出于您的目的,这就是它的作用)

因此,如果“设置状态”是指“count_char_line == PRE_WORT”为真,那么是的。但是在编译之后,字面上会被解释为“count_char_line == 0”,所以实际上并没有太多的“状态”。

“#define”对于简单地定义一些在特定上下文中表示某事的常量很有用。你还没有真正定义它使用的上下文,所以我不确定你是否正确地做它,但乍一看似乎很好

于 2013-06-17T16:00:55.510 回答