可能的重复项:
在 C 中使用布尔值
我是 C 的新手,想编写一个可以从网络摄像头检测人脸的程序,我在网上得到了一个,我在 eclipse CDT 上使用 opencv-2.4.3,我在网上搜索解决方案,但没有为我的问题找到合适的解决方案,所以将其作为新问题发布。这是代码:
// Include header files
#include "/home/OpenCV-2.4.3/include/opencv/cv.h"
#include "/home/OpenCV-2.4.3/include/opencv/highgui.h"
#include "stdafx.h"
int main(){
//initialize to load the video stream, find the device
CvCapture *capture = cvCaptureFromCAM( 0 );
if (!capture) return 1;
//create a window
cvNamedWindow("BLINK",1);
while (true){
//grab each frame sequentially
IplImage* frame = cvQueryFrame( capture );
if (!frame) break;
//show the retrived frame in the window
cvShowImage("BLINK", frame);
//wait for 20 ms
int c = cvWaitKey(20);
//exit the loop if user press "Esc" key
if((char)c == 27 )break;
}
//destroy the opened window
cvDestroyWindow("BLINK");
//release memory
cvReleaseCapture(&capture);
return 0;
}
而且我得到的错误是true'未声明(在此函数中首次使用(,它在while循环中引起问题,我读到使用while(true(不是很好的做法,但是我应该怎么做。谁能把我赶出去。
将其替换为例如
while(1)
或
for(;;)
或者你可以这样做(在循环之前定义c
(:
while (c != 27)
{
//grab each frame sequentially
IplImage* frame = cvQueryFrame( capture );
if (!frame)
break;
//show the retrieved frame in the window
cvShowImage("BLINK", frame);
//wait for 20 ms
c = cvWaitKey(20);
//exit the loop if user press "Esc" key
}
或者根本没有c
,但这将以 20 毫秒的等待开始循环:
while (cvWaitKey(20) != 27)
{
//grab each frame sequentially
IplImage* frame = cvQueryFrame( capture );
if (!frame)
break;
//show the retrieved frame in the window
cvShowImage("BLINK", frame);
}
还有第三种可能:
for(;;)
{
//grab each frame sequentially
IplImage* frame = cvQueryFrame( capture );
if (!frame)
break;
//show the retrieved frame in the window
cvShowImage("BLINK", frame);
if (cvWaitKey(20) == 27)
break;
}
更新:虽然想知道定义是否更正确
#define true 1
#define false 0
或
#define true 1
#define false (!true)
或再次
#define false 0
#define true (!false)
因为如果我,比如说,这样做:
int a = 5;
if (a == true) { // This is false. a is 5 and not 1. So a is not true }
if (a == false){ // This too is false. So a is not false }
我会想出一个非常奇怪的结果,我发现这个链接指向一个稍微奇怪的结果。
我怀疑要以安全的方式解决此问题,需要一些宏,例如
#define IS_FALSE(a) (0 == (a))
#define IS_TRUE(a) (!IS_FALSE(a))
true
在许多版本的c中都没有定义。如果要使用"布尔值",请参阅在 C 中使用布尔值
C 编译器指出,变量 true
未在代码中的任何位置声明,也不会在其包含的头文件中声明。它不是原始 C 语言规范的一部分。您可以像这样将其定义为宏:
#define true 1
但是使用while(1)
更简单,更清晰。 如果你需要一个事件循环,这是通常完成的方式。如果这是"不好的做法",那对我来说是新闻。
我一直忘记C99。您也可以尝试添加
#include <stdbool.h>
如果您的 C 版本支持它。