As Luis said, the choppiness problem will be solved by delta timing. The basic idea is that you multiply a delta time (change in time) value by the corresponding speed. So, you'd calculate deltaTime in seconds as a float and multiply it by whatever speed you want, for instance 100 pixels per second.
sf::Clock deltaClock;
float deltaTime = 0.f;
int lastFrameTime = 0;
sf::Vector2f velocity(0.f, 100.f);
while (myGameIsRunning)
{
deltaTime = ((float)deltaClock.getElapsedTime().asMilliseconds()-lastFrameTime)/1000.f;
lastFrameTime = deltaClock.getElapsedTime().asMilliseconds();
// When moving objects
characterSprite.move(velocity*deltaTime);
}
I hope that helps. Now, for gravity and movement and whatnot. Off the top of my head, what I would do is have multiple 2D vectors that get summed together for the player's final speed. So, you'll have a movement vector that is modified when keypresses are detected and a gravity vector for handling gravity/jumping. I'll try to code this up, but keep in mind it's more pseudo-code than code you can compile.
sf::Vector2f playerSpeed;
sf::Vector2f gravity;
while (myGameIsRunning)
{
playerSpeed = sf::Vector2f(0.f, 0.f); // Reset the player's speed each frame so we can add to it with each keypress
if (leftDown) playerSpeed += sf::Vector2f(-100.f, 0.f);
if (rightDown) playerSpeed += sf::Vector2f(-100.f, 0.f);
if (upPressed) gravity = sf::Vector2f(0.f, -200.f); // up we go :)
gravity.y -= 75.f*deltaTime;
if (gravity.y > 200.f) gravity.y = 200.f; // Don't let gravity get too fast
playerSprite.move((playerSpeed+gravity)*deltaTime);
}
And that should do it! Sorry I'm too lazy to actually go through your code and make it work, I'm about to go to sleep, have class early tomorrow! Hope this helps