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;
}
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
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP