Ir ao conteúdo

Posts recomendados

Postado

Estou tentando fazer uma calculadora gráfica com SFML.

O problema está na função cin. Ela não está lendo as posições do vetor coef. Ele pede para ler mas depois o programa fecha sem retornar 0.

O código abaixo:

#include<SFML/Graphics.hpp>
#include<iostream>
#include<cmath>

using namespace std;
using namespace sf;

int main(){
	vector<RectangleShape> pixel;
	vector<float> coef; // COEFICIENTES
	int ncoef; // NUMERO DE COEFICIENTES
	float x, y;
	
	cout << "Digite o numero de coeficientes: ";
	cin >> ncoef;
	for(int i=0; i<ncoef; i++){
		cout << "Digite o coeficiente " << i+1 << ": ";
		cin >> coef[i];
		printf("Ok.\n");
	}
	RenderWindow window(VideoMode(201,201), "Calculadora Grafica");
	for(x=-201; x<201; x++) for(int i=0; i<ncoef; i++){
		y += (float)coef[ncoef]*pow(x,ncoef-i);
		pixel[x].setPosition(Vector2f(x+101,y+101));
	}
	while(window.isOpen()){
		Event e;
		while(window.pollEvent(e))
			if(e.type == Event::Closed)
				window.close();
	
		for(int i=0; i<201; i++){
			pixel[i].setFillColor(Color::Green);
			pixel[i].setSize(Vector2f(1,1));
		}
		window.clear(Color::Black);
		for(int i=0; i<201; i++) window.draw(pixel[i]);
		window.display();
	}
	getch();
	return 0;
}

imagem.png

Postado

Aqui:

 

1 hora atrás, Daniel Oliveira disse:

cin >> coef[i];

 

pode causar um problema de segmentation fault porque o elemento i não existe. Afinal o vetor coef está vazio. Você pode simplesmente ler o coeficiente numa variável temporária e usar push_back pra colocá-lo no vetor. push_back vai alocar memoria por conta própria:

 

for(int i = 0; i < ncoef; i++) {
	float temp;
	std::cout << "Digite o coeficiente " << i + 1 << ": ";
	std::cin >> temp;
	coef.std::vector<float>::push_back(temp);
	printf("Ok.\n");
}

 

Você tampouco precisa da variável ncoef, porque coef já possui seu próprio tamanho internamente e você pode checá-lo com a função size.

 

Por sinal, você também esqueceu de incluir a biblioteca <vector>.

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...