所以我试图用SFML做一个排序算法可视化工具。这一切都很好,直到我询问用户输入数组的大小以及用户希望看到它可视化的算法。当我要求用户输入时,程序在后台执行一段时间,排序开始,但我不能显示几秒钟。
int main(){
int Size = takeSize();
int choice = takeAlgorithm();
fillArray(Size);
while(window.isOpen()){
Event event;
while (window.pollEvent(event))
if(event.type == Event::Closed) window.close();
if(!sorted){
dispSort(0);
algorithmSelector(choice);
}
}
return 0;
}
这是我的主程序。如果我设置了数组的大小和之前运行的排序算法,一切都可以完美地工作,但是如果我用takeSize()和takeAlgorithm()函数从用户那里获取输入:
int takeSize(){
cout << "Please enter a number between 10 and 150 for the number of elements in the array: \n";
int vectorSize;
while(true){
cin >> vectorSize;
if(vectorSize >=10 && vectorSize <=199)
return vectorSize;
else{
cout << "Please enter a valid number between the given ranges!\n";
continue;
}
}
}
int takeAlgorithm(){
cout << "Please enter the corresponding number to select the sorting algorithm you want to see visualized: \n";
cout << "1-) Bubble Sort\n";
cout << "2-) Merge Sort\n";
cout << "3-) Insertion Sort\n";
cout << "4-) Selection Sort\n";
cout << "5-) Gnome Sort\n";
int number;
cin >> number;
return number;
}
窗口在后台开始排序时显示较晚。注意:我在全局范围内使用这个-> RenderWindow window(VideoMode(601, 600), "Sorting Algorithm Visualizer!");
,所以会出现一个空窗口,然后我在该窗口转到后台后输入输入。
1条答案
按热度按时间ndasle7k1#
问题是,除非轮询事件,否则SFML窗口不会显示,因此它不会仅仅因为您构造了
sf::RenderWindow
而显示。您的代码需要一段时间才能到达轮询事件的点,因为std::cin
blocks SFML。您可以选择不使用
std::cin
,而是在GUI中使用SFML获取键盘输入,或者您可以接受在输入数组大小之前窗口不会打开。我认为后者实际上更有意义,因为如果没有一个元素数组需要排序,窗口会显示什么,这并不清楚。