Jump to content
Fórum Script Brasil
  • 0

josericardoc
 Share

Question

Olá, estou estudando c++ e me desafiei a criar um código que recebesse nomes e depois apresentasse eles na tela sendo que para parar de digitar os nomes você entraria com um código definido no inicio do programa.
Mas estou tendo problemas em nomes que levem espaço entre eles, está acontecendo que se eu entro com "josé ricardo" ele imprime josé numa linha e ricardo na outra, como faço para que ele coloque junto em uma unica linha? (obs : precisei entrar com x ali e depois tirei 1 do x pois quando ia imprimir ele tava imprimindo também o código de saída definido no inicio). Agradeço a ajuda.



#include <iostream>
#include <stdlib.h>
#include <vector>
#include <string.h>
using namespace std;

void nome ()
{
int i,x;
int LINHA1=50;
int COLUNA1=60;
char saida [4];
char nomes [LINHA1][COLUNA1];
cout << "digite um codigo para a sua saida\nquando desejar sair basta digitar seu codigo novamente \n(seu codigo pode ter 1 character)"<<endl; 
cin >> saida; 
for (i = 0,x = 0; i < LINHA1;i++)
{

cout << "digite nomes, para sair use o seu codigo"<<endl;
cin >> nomes;
x++;

if (strcmp (nomes, saida) == 0){
break;
}


}


system ("cls");
cout << "Os nomes digitados foram "<<endl;
for(int i = 0; i < x - 1; i++)
{

cout <<endl<< nomes<<endl;

}


}





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



nome();
return 0;
}

Link to comment
Share on other sites

2 answers to this question

Recommended Posts

  • 0

Use o cin.getline() pra isso.

(Para não deixar as informações tão razas, se não der pra entender eu respondo melhor depois, boa sorte)

char name[50];

cin.getline(name, 50); //Argumentos usados name = variavel que vai receber a entrada, 50 = Quantidade maxima de caracteres que serão armazenadas por este método

http://www.cplusplus.com/reference/istream/istream/getline/

--------------------------------------------------------------------------------------------------------------------

Tambem gostaria de comentar sobre a declaração do int i na primeira parte do codigo, se ele for uma variavel usada no loop o melhor é declarar ela dentro do loop pra ela ser desalocada assim que o loop sair de escopo.

Edited by Nando_xd
Link to comment
Share on other sites

  • 0

Aparte do que já comentou Nando_xd, eu recomendaria você usar logo depois do cin.getline(name, 50); a sentença cin.sync() ficando da seguinte forma:

char name[10][50];

for(int i = 0; i<10;i++...
cin.getline(name, 50);
cin.sync();
...
Por que usar isso? Fácil! Se não por o cin.sync() o buffer vai conter lixo trás pulsar a tecla enter, certamente vai saltar as seguintes leituras posteriores a essa primeira leitura, a função membro sync da classe cin elimina esse resíduo do buffer de entrada(stdin) sincronizando o conteúdo da string com o que você realmente entrou por teclado, fazendo com que seu programa funcione corretamente seu programa, chame sin.sync logo depois de fazer uma leitura, ou incluso antes si tiver problemas, normalmente quando quiser trabalhar com chars ou strings.

Sorte.

Edited by vangodp
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Forum Statistics

    • Total Topics
      149.6k
    • Total Posts
      646.2k
×
×
  • Create New...