Obtener toda la línea con un enter

Iniciado por JuszR, 31 Octubre 2010, 02:23 AM

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

JuszR

Estoy haciendo un conversor de binario a decimal y tengo un problema. Para ingresar el número binario tengo que apretar cada dígito y depués enter (8 veces, o más).
¿Hay alguna manera para poder obtener toda la línea, escribiendo los 8 dígitos, y solo apretar una vez enter?

Sería más fácil poner 00001111 [ENTER]; que 0[ENTER], 0[ENTER], 0[ENTER]... ;D

Este es mi código:
Código (cpp) [Seleccionar]
void ConvertToDec()
{
cout << "\nGive me a binary number (8-bit)" << endl;

short Resultado = 0;
for(int i = 0, x = 128; i < 8; i++)
{
unsigned short Numero[8];
cin >> Numero[i];

Resultado += Numero[i] * x;
x /= 2;
}

cout << endl << Resultado << endl;

}


Traté poniendo cin.getline(Numero, 8); pero me tira un error larguísimo.
- No programming language is perfect. There is not even a single best language; there are only languages well suited or perhaps poorly suited for particular purposes. [Herbert Mayer]

do-while

¡Buenas!

Es tan facil como ir lyendo (con fgets) fragmentos y solapandolos.

Tambien podrias utilizar un puntero a la informcion y asignacion dinamica de memoria...

¡Saludos!
- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!

JuszR

fgets me suena a C, yo uso C++. :rolleyes:

Lo del puntero no se, todavía no llegué a eso. ;D
- No programming language is perfect. There is not even a single best language; there are only languages well suited or perhaps poorly suited for particular purposes. [Herbert Mayer]

Horricreu

#3
La mayoría, por no decir todas, de las bibliotecas estándar de C, están adaptadas para C++ con todas sus respectivas funciones:

http://www.cplusplus.com/reference/clibrary/cstdio/

Ahí encontrarás fgets() y, como bien he dicho las demás funciones que son de la librería cstdio.

Akai

#4
Tu problema está en que cin.getline recibe una cadena:

istream& getline (char* s, streamsize n );
istream& getline (char* s, streamsize n, char delim );

lee la cadena s hasta n caracteres o un \n en el primer caso
lee la cadena s hasta n caracteres o el carácter 'delim' en el segundo caso.


En ese caso, lo que puedes hacer es que tu "numero" se lea primero como una cadena, y luego pasarlo a entero para trabajar con él o bien trabajar con la cadena de carácteres y guardar el resultado de la conversión en un entero.

Khronos14

Si usas scanf, lo haces todo en una línea, personalmente prefiero printf y scanf al cout y cin ya que se pueden hacer más cosas...

Código (cpp) [Seleccionar]

#include <iostream>
#include <stdio.h>

using namespace std;

int main()
{
char number[9];
    cout << "Give me a binary number (8-bit): ";
    scanf("%8[^\n]", number);
    number[8] = 0;

    cout << "Numero: " << number << endl;
    return 0;
}


Saludos.

JuszR

- No programming language is perfect. There is not even a single best language; there are only languages well suited or perhaps poorly suited for particular purposes. [Herbert Mayer]

piou

Cita de: Khronos14 en  1 Noviembre 2010, 14:50 PM


Código (cpp) [Seleccionar]


    scanf("%8[^\n]", number);



No entiendo eso %8[^\n] qué significa poner un número detrás del %, y los corchetes y el ^ antes de \n??

Khronos14

Cita de: piou en  2 Noviembre 2010, 16:30 PM
Cita de: Khronos14 en  1 Noviembre 2010, 14:50 PM


Código (cpp) [Seleccionar]


    scanf("%8[^\n]", number);



No entiendo eso %8[^\n] qué significa poner un número detrás del %, y los corchetes y el ^ antes de \n??

Significa leer por el teclado hasta que se pulse enter \n y como máximo 8 caracteres.

Saludos.