【发布时间】:2018-11-20 05:54:46
【问题描述】:
我使用 C++ 和 SFML 编写了一个程序。该程序应该生成 20 个红色或蓝色的圆圈,并且确实有效。然而,我做了一些更改,保存并在几个小时后在 VS 上返回它,发现我不断收到错误:
'{':找不到匹配的令牌(第 9 行)
我一直在扫描代码,但似乎根本找不到问题所在。
代码:
#include <SFML/Graphics.hpp>
#include <iostream>
#include <chrono>
#include <random>
using namespace std;
int main()
{ //Line 9
unsigned seed = chrono::system_clock::now().time_since_epoch().count();
default_random_engine generator(seed);
uniform_int_distribution<int> distribution1(0, 1024);
uniform_int_distribution<int> distribution2(1, 2);
sf::RenderWindow window(sf::VideoMode(1024, 1024), "Spooky Circle Box");
sf::CircleShape shape(100.f);
shape.setFillColor(sf::Color::Red);
shape.setPosition(10, 10);
std::vector<sf::CircleShape> circles(20);
window.clear();
for (unsigned int i = 0; i < circles.size(); i++) {
int find = 0;
int find_color = 0;
while (find != 20) {
circles[i].setPosition(distribution1(generator), distribution1(generator));
for (unsigned int j = 0; j < circles.size(); j++) {
if (i == j || (circles[i].getPosition().x != circles[j].getPosition().x || circles[i].getPosition().y != circles[j].getPosition().y)) {
find++;
} else;
if (find != 20) {
find = 0;
} else;
}
find = 0;
find_color = distribution2(generator);
circles[i].setRadius(5.f);
if (find_color == 1) {
circles[i].setFillColor(sf::Color::Blue);
} else { circles[i].setFillColor(sf::Color::Red); }
window.draw(circles[i]);
}
window.display();
while (window.isOpen()) {
sf::sleep((sf::milliseconds(100)));
sf::Event event;
while (window.pollEvent(event))
{
if (event.type == sf::Event::Closed)
window.close();
}
}
return 0;
}
【问题讨论】:
-
您在末尾缺少一个右括号,但您应该重新检查所有大括号并确保将它们关闭在正确的位置。我认为你在某处有一些不好的缩进
-
说,你的代码很乱,你至少有两个(意外的)无限循环。第一个无法让您从
while(find != 20)逃脱,因为您每次在第二个for内都将find设置为0。第二个“无限”循环是while(window.isOpen()),因为正如它的名字所说,你会在那里直到你的窗口关闭 -
我知道我在某个地方缺少了一个大括号,但我没有看到问题,这就是我的问题。此外,它们都应该是无限循环。第一个直到找到一个有效的位置,并且只需要 1-3 次尝试。第二个应该是这样,否则你永远无法正确关闭窗口。我想我可以添加一个暂停来降低压力。
-
如果您的意图只是画一次圆圈,我认为您在第 32 行和第 33 行之间缺少右括号。看来您正在缩进代码,但
for(行29) 需要大括号
标签: visual-c++ sfml