C编程中的布尔值

Boolean in C Programming

因此,不幸的是,我在尝试创建的程序中遇到了另一个问题。首先,我对C编程完全陌生,我正在尝试创建一个单词搜索。

我有一段C++代码,我想把它变成C:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include <iostream>

using namespace std;

int main()
{
    char puzzle[5][5] = {
        'A', 'J', 'I', 'P', 'N',
        'Z', 'F', 'Q', 'S', 'N',
        'O', 'W', 'N', 'C', 'E',
        'G', 'L', 'S', 'X', 'W',
        'N', 'G', 'F', 'H', 'V',
    };
    char word[5] ="SNOW"; // The word we're searching for
    int i;
    int len; // The length of the word
    bool found; // Flag set to true if the word was found
    int startCol, startRow;
    int endCol, endRow;
    int row, col;

    found = false;

    i   = 0;
    len = 4;

    // Loop through each character in the puzzle
    for(row = 0; row < 5; row ++) {
        for(col = 0; col < 5; col ++) {
            // Does the character match the ith character of the word
            // we're looking for?
            if(puzzle[row][col] == word[i]) {
                if(i == 0) { // Is it the first character of the word?
                    startCol = col;
                    startRow = row;
                } else if(i == len - 1) { // Is it the last character of the
                                          // word?
                    endCol = col;
                    endRow = row;

                    found = true;
                }

                i ++;
            } else
                i = 0;
        }

        if(found) {
            // We found the word
            break;
        }
    }

    if(found) {
        cout <<"The word" << word <<" starts at (" << startCol <<","
             << startRow <<") and ends at (" << endCol <<"," << endRow
             <<")" << endl;
    }

    return 0;
}

但是,我遇到了一个问题,因为我刚注意到C编程不支持布尔值。

我使用它是为了让用户输入他正在搜索的单词(例如:boy),用户还输入长度(3),然后用户将输入单词的第一个字母和最后一个字母的坐标。当用户输入以下内容时,我计划从上面的代码中获取坐标,然后将它们与用户输入的内容进行比较。如果他们不匹配的用户猜测错误,如果他们匹配的用户猜测正确。

我也试过stdbool.h库,但它不起作用,因为找不到它。

有没有其他方法代替stdbool.h?我知道您使用了true=1,false=0,但是我不知道如何在下面的代码中解释它。

事先谢谢。


你说

I've also tried the stdbool.h library , however it didn't work because the library wasn't found.

那么,我倾向于建议您找到并使用一个符合C99或C2011的编译器。至少,前者不应该太难掌握。这两种方法都可以确保提供报头,使用它可能是您前进的最方便的方式。

因为您的代码仍然包含一些C++ - ISM(例如EDCOX1,18),EDCOX1,19,语句,和C++风格的#include),我倾向于相信您正在用C++编译器编译。这是找不到stdbool.h头的一个可以想象的原因。如果您想转换为C,那么一定要用C编译器构建代码。


只需使用int即可。否则,请创建自己的布尔类型:

1
2
enum { false, true };
typedef int bool;

如果你想储存很多布尔酒,考虑

1
typedef char bool;

相反。请注意,这两种类型都不能成为"真正的"布尔类型,因为它可以假定除0和1之外的其他值。使用C约定,0表示虚假,而其他值表示真实。


c99具有头。


I don't know exactly how to interpret it in the following code.

我想你不能解释:

1
2
3
4
5
6
if (1) {
  printf("Will this be printed?
"
);
} else {
  printf("or will this be printed?
"
);

规则是,任何非0的整数都被视为布尔值falsec,整数0falseto c。

所以:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int found = 1;
if (found) {
  printf("this will be printed
"
);
} else {
  printf("this will not be printed
"
);
}
found = 0;
if (found) {
  printf("this will not be printed
"
);
} else {
  printf("this will be printed
"
);
}

编辑:

如果你想写这样的代码

1
int found = true;

实际上,您的编译器并不知道true,您可以使用enum#defineconst int

但是,如果您没有布尔数据类型,并且不能包含stdbool,则表示编译方式有问题,需要进行修复,并将为您提供bool。


使用int时,1等于true0等于false

但我在程序顶部的代码中使用了这个,两个常量使用单词truefalse,就好像它们是布尔值:

1
2
#define FALSE 0
#define TRUE  1