Dudas varias programa

Iniciado por novatus84, 24 Noviembre 2014, 19:20 PM

0 Miembros y 1 Visitante están viendo este tema.

novatus84

Muy buenas estoy haciendo una practica de fibonacci tengo lo siguiente después de mucha comedura de cerebro...
Código (cpp) [Seleccionar]
#include <vector>
#include <math.h>
#include <iostream>
using namespace std;


void fibonacci (int x, int y , vector<int>& v, int n){
    int num1 = x;
    int num2 = y;
    int aux;
    v.push_back(x);
    v.push_back(y);
    for (int d = n-2; d > 0; --d){
        aux = num1 + num2;
        num1 = num2;
        num2 = aux;
        v.push_back(aux);
    }
}

int main(){
    int x;
    int y;
    int n;
    cout << "Enter the first term: \n";
    cin >> x;
    cout << "Enter the second term: \n";
    cin >> y;
    cout << "Enter the number of terms: \n";
    cin >> n;
    vector<int> v;
    fibonacci(x, y, v , n);
    cout << endl << "The numbers for the sequence asked are: " << endl;
    for (int i = 0; i <v.size(); ++i){
        cout << v[i] << endl;
    }
}


¿como puedo sacar del main la lectura de los datos?
¿como hacer que no se pueda introducir letras, que solo lea datos?
en fin mejorarlo que llevo tiempo con ello y no me apaño no hacen mas que salirme errores, Gracias de antemano, saludos

Orubatosu

El tema de control de errores por parte del usuario es... una batalla perdida, los usuarios tontos son muy inteligentes  ;D

Pero, puedes hacer obviamente controles... por ejemplo (una opción, hay otras) la entrada por CIN haz que sea un string, ya que un string virtualmente se lo come "todo". Luego compruebas que lo introducido es efectivamente un número, y si es así lo "das por bueno".

Intenta por ejemplo en una función convertir ese string en un objeto istringstream, y sacas "a piñón" un entero. Si la lectura tiene éxito, el contenido es un entero, si no tiene éxito obras en consecuencia.

Por ejemplo:


#include <iostream>
#include <sstream>

using namespace std;

int numero(string entrada, bool& correcto){
    int valor;
    istringstream S(entrada);
    if (!(S >> valor)) correcto = false;
    return valor;
}


int main(){
    bool lectura = true;
    string In;
    int X;
    int Y;
    int N;
    cout << "Enter the first term: \n";
    cin >> In;
    X = numero(In, lectura);
    cout << "Enter the second term: \n";
    cin >> In;
    Y = numero(In, lectura);
    cout << "Enter the number of terms: \n";
    cin >> In;
    N = numero(In, lectura);
    // -------------------------
    cout << "Valor de X = " << X << endl;
    cout << "Valor de Y = " << Y << endl;
    cout << "Valor de N = " << N << endl;
    if (!lectura) cout << "Uno de los valores es erroneo" << endl;
}


Eso si, aquí tenemos un "medio problema", y es que tal y como te lo planteo, solo te dice que uno de los valores es erróneo, no cual, y además si introduces un valor como por ejemplo "125df" tomará solo 125 e ignorará el resto.

Espero que te sirva de algo, aunque seguro que a alguien se le ocurre como meter un dato erróneo.
"When People called me freak, i close my eyes and laughed, because they are blinded to happiness"
Hideto Matsumoto 1964-1998