Programmation booléenne en C

Donc, malheureusement, j’ai rencontré un autre problème avec un programme que j’essaie de créer. Tout d’abord, je suis totalement novice en programmation C et j’essaie de créer une recherche par mot .

J’ai ce morceau de code qui est en C ++ et j’essaye de le transformer en C:

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

Cependant, j’ai rencontré un problème car je viens de remarquer que la programmation en C ne prend pas en charge les booléens.

Je l’utilise pour que l’utilisateur entre le mot qu’il recherche (par exemple: garçon), l’utilisateur entre également la longueur (3), puis l’utilisateur entre les coordonnées de la première et de la dernière lettre du mot. . Lorsque l’utilisateur entre les informations suivantes, je prévois obtenir les coordonnées du code ci-dessus et de les comparer avec les informations entrées par l’utilisateur. S’ils ne correspondent pas, l’utilisateur a mal deviné, et s’ils correspondent, l’utilisateur l’a deviné correctement.

J’ai aussi essayé la bibliothèque stdbool.h , mais cela n’a pas fonctionné car la bibliothèque n’a pas été trouvée.

Existe-t-il un autre moyen au lieu de stdbool.h ? Je sais que vous utilisez true = 1, false = 0 mais je ne sais pas comment l’interpréter exactement dans le code suivant.

Merci d’avance.

Vous dites que

J’ai aussi essayé la bibliothèque stdbool.h, mais cela n’a pas fonctionné car la bibliothèque n’a pas été trouvée.

J’ai donc tendance à suggérer que vous trouviez et utilisiez un compilateur conforme C99 ou C2011. Les premiers, du moins, ne devraient pas être trop difficiles à mettre la main sur. L’un ou l’autre fournira assurément l’en-tête, et son utilisation est probablement votre moyen le plus pratique d’avancer.

Dans la mesure où votre code contient encore des expressions C ++ (par exemple, cout , une instruction using et #include style C ++), j’ai tendance à croire que vous comstackz avec un compilateur C ++. C’est l’une des raisons possibles pour lesquelles l’en stdbool.h tête stdbool.h n’est pas trouvé. Si vous souhaitez convertir en C, veillez à générer votre code avec un compilateur C.

Utilisez simplement un int place. Sinon, créez votre propre type booléen:

 enum { false, true }; typedef int bool; 

Si vous voulez stocker beaucoup de booléens, considérez

 typedef char bool; 

au lieu. Notez que ni l’un ni l’autre ne crée un type «réel» booléen, car il peut prendre d’autres valeurs que 0 et 1. Utilisez la convention C selon laquelle 0 indique une fausseté, tandis que toutes les autres valeurs indiquent la vérité.

C99 a l’en-tête .

Vous pouvez utiliser un int avec 1 égal à true ou 0 égal à false

Mais j’utilise cela dans mon code en haut du programme, deux constantes pour utiliser les mots TRUE et FALSE comme s’il s’agissait de booléens:

 #define FALSE 0 #define TRUE 1 

Je ne sais pas exactement comment l’interpréter dans le code suivant.

Je suppose que vous ne pouvez pas interpréter:

 if (1) { printf("Will this be printed?\n"); } else { printf("or will this be printed?\n"); 

La règle est la suivante: tout nombre entier différent de 0 est considéré comme la valeur booléenne false C. et le nombre entier 0 est un false pour C.

alors:

 int found = 1; if (found) { printf("this will be printed\n"); } else { printf("this will not be printed\n"); } found = 0; if (found) { printf("this will not be printed\n"); } else { printf("this will be printed\n"); } 

MODIFIER:

si vous voulez écrire du code comme

 int found = true; 

et true n’est en fait pas connu de votre compilateur, vous pouvez le contourner avec enum , #define ou const int

Pourtant, le fait que vous n’ayez pas de type de données booléen et que vous ne pouvez pas inclure stdbool indique qu’il ya un problème avec la façon dont vous comstackz, qui mérite d’être réparée et qui vous fournira un booléen.