TransWikia.com

Problema al ingresar 2 strings contiguos con cin.get(cadena,dimension,'n')

Stack Overflow en español Asked by Eduardo Matijak on August 26, 2021

tengo un problema al ingresar 2 cadenas de caracteres, una después de otra, y es que luego de ingresar con el cin.get(cadena,dimension,’n’) la cadena A es necesario presionar 2 veces enter para que me permita ingresar la cadena B (lo mismo ocurre luego de ingresar B).
Analizando, me di cuenta que el cin.ignore(256,'n') es el responsable de esto, sin embargo es necesario, así que consulto ¿qué puedo hacer para solucionar esto?. Aquí está el código, el cual se encarga de combinar los arreglos A y B en uno C:

#include <iostream>

#include <cstring>

using namespace std;

//PROTOTIPOS

char* combinar(char*,char*);

int main(int argc,char *argv[]){

    int N=0;

    char *A,*B,*C;

    cout<<"Ingrese dimension de A y B: ";

    cin>>N;

    while(N<=0){

        cout<<"Error, ingrese una dimension valida: ";

        cin>>N;

        cout<<endl;

    }

    cin.get();

    A=new char[N];

    B=new char[N];

    cout<<"Ingrese cadena A: ";

    cin.getline(A,N,'n');

    cin.clear();

    cin.ignore(256,'n');

    cin.get();

    cout<<"Ingrese cadena B: ";

    cin.getline(B,N,'n');

    cin.clear();

    cin.ignore(256,'n');

    cout<<endl;

    C=combinar(A,B);

    cout<<endl;

    cout<<"A y B combinadas: "<<C<<endl;

    cout<<"Longitud A y B combinadas: "<<strlen(C)<<endl;

//ELIMINO ESPACIO EN MEMORIA

    delete[] A;

    delete[] B;

    delete[] C;

//  system("pause");

    return 0;

}

char* combinar(char *a,char *b){

    char *c;

    int n=0,k=0;

    bool bandera=true;

    while(*(a+k)!='00'){

        k++;

    }

    n=k+1;

    int j=0,i=0,t=-1;

    c=new char[n];

    for(i=0;i<2*n;i++){

        if(bandera==true){

            *(c+i)=*(a+i);

            j++;

            if(*(c+i)=='00'){

                bandera=false;

                i--;

                j--;

            }

        }else{

            *(c+i)=*(b+i-j);

            cout<<"["<<i-j<<"] = "<<*(c+i)<<endl;

        }

        cout<<*(c+i)<<endl;

    }

    *(c+i)='00';

    return c;

}

One Answer

es necesario presionar 2 veces enter para que me permita ingresar la cadena B

Eso pasa porque tienes un get que no debería estar ahí

cout<<"Ingrese cadena A: ";

cin.getline(A,N,'n');

cin.clear();

cin.ignore(256,'n');

cin.get(); // <<--- AQUI!!!

cout<<"Ingrese cadena B: ";

cin.getline(B,N,'n');

Esa instrucción lee un caracter de la entrada estándar, y da la casualidad de que en C++, las lecturas son bloqueantes, lo que te fuerza a introducir un salto de línea para avanzar.

Answered by eferion on August 26, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP