我正在使用GLFW开发一个应用程序,用户可以在控制台中输入一些信息,程序对信息进行一些处理,然后打开一个opengl窗口(使用GLFW)来显示结果。然后,用户可以关闭窗口,然后返回主菜单并输入更多信息。
目前我遇到的问题是,一旦关闭GLFW / OpenGL窗口,控制台就不再接受来自scanf()的任何输入。我相当肯定我正在关闭GLFW,所以我不确定问题是什么。
我正在使用的代码如下:
MAIN.C:
#include <stdio.h>
#include <stdlib.h>
#include "glfw.h"
#include "pantograph.h"
int main(int argc, char** argv)
{
printf("program start");
int a = 0;
scanf("%i",&a); //this works
printf("%c",a);
p_open_window(1000, 500, 0, "hi there");
int i = 0;
for(i=0;i<1000;i++)
{
p_begin_render();
glBegin(GL_POINTS);
glVertex2i(i,i/2);
glEnd();
scanf("%i",&a);
p_end_render();
}
p_close_window();
scanf("%i",&a); //this does not work
printf("%i",a);
return 0;
}
pantograph.h:
int p_open_window(int width, int height, int fullscreen, const char* title)
{
glfwInit();
glfwDisable(GLFW_AUTO_POLL_EVENTS);
if(fullscreen)
{
glfwOpenWindow(width,height,8,8,8,8,0,0,GLFW_FULLSCREEN);
}else{
glfwOpenWindowHint(GLFW_WINDOW_NO_RESIZE, GL_TRUE);
glfwOpenWindow(width,height,8,8,8,8,0,0,GLFW_WINDOW);
}
glViewport(0, 0, width, height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, width, height, 0, 0, 1);
glMatrixMode(GL_MODELVIEW);
glDisable(GL_DEPTH_TEST);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
return 1;
}
void p_begin_render()
{
glClearColor(0.0, 0.0, 0.0, 1.0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor4f(1.0, 1.0, 1.0, 1.0);
glLoadIdentity();
}
void p_end_render()
{
glfwSwapBuffers();
}
void p_close_window()
{
glfwCloseWindow();
glfwTerminate();
}
答案 0 :(得分:0)
我对你的程序流程感到有些困惑。你说'用户可以关闭窗口并返回主菜单'。但是程序如何退出(i&lt; 1000)循环?如果用户只是关闭窗口,它似乎仍然会执行for循环(特别是因为循环中的scanf)。
您是否使用过调试器来查看程序被捕获到哪一点?
答案 1 :(得分:0)
感谢#glfw的人们,我找到了一个有些讨厌的解决方案......
如果在关闭glfw窗口后直接“刷新”输入缓冲区,scanf将再次开始工作。我不完全确定原因,但它现在似乎有效,所以我很满意。
我正在使用的代码如下(关闭窗口后):
int ch;
while ((ch = getchar()) != '\n' && ch != EOF);
此后,scanf再次开始工作。