Ir ao conteúdo
  • Cadastre-se

C++ Problema com comando WHILE


emanuelrichard
Ir à solução Resolvido por Flávio Pedroza,

Posts recomendados

Estou com problema com While , ele nao esta obedecendo minha condiçao . Quando digito " -1 " ele nao encerra o programa ...

#include <iostream>
#include <iomanip>

using namespace std;

int main()
{
	int n, x=0, z=0, y = 0, i=0;
	char bit[100], b[100];

	do
	{
		//cout << " Entre com numero de codigo RN : " ;
		cin >> n;
	}
	while(n > 10);

	//cout << " Digite numero do bits : " << i << "  ";
	cin.getline(bit,100);

	while(bit[i] != '-1' )
	{	
		if(bit[i]=='0')
			x=x+1;
		else if (bit[i]=='1')
			z=z+1;
		
		
		
		if(x+z == n)
		{
			if(x>z)
				bit[y]='0';
			else if(z>x)
				bit[y]='1';
			
			b[y]=bit[y];
			y++;
			x=0;
			z=0;
		}
		
		i++;
		
		//cout << " Digite numero do bits : " << i << "  ";
		cin.getline(bit,100);
	}
	
	
	for (int i = 0 ; i < y ; i++)
	{
		cout<<b[i]<<" ";
	}

	return 0;
}
	

 

Link para o comentário
Compartilhar em outros sites

  • Solução
2 horas atrás, Math.Pi disse:

Não sou bom em C++, mas nessa linha abaixo você não deveria informar o índice i do vetor?


cin.getline(bit,100);

 

Não precisa...

//while(bit[i] != '-1' ) A sintaxe esta erradada. perceba que, -1, na verdade, sao dois caracteres (uma string), e bit[i] armazena um unico caractere (char), entao nao ha como fazer esta compracao. 

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Não sei o que tenta fazer com esses bits, já que não postou uma definição de seu programa com o código, mas entenda que trocar stdio.h por iostream e trocar printf() por cout e scanf() por cin não é exatamente  transformar C em C++

 

getline() retorna uma referência para istream  e o valor lido em str. E lê até encontrar delim, um char, ou um '\n'.

 

Veja a declaração

 

getline.png.64821449913e73bb5df1933d0b712247.png

 

Em seu programa bit é do tipo char*, e bit   ---  que é a mesma coisa que *(bit + i) ---  é um char, para qualquer i. Isso quer dizer que você tenta gravar uma string em um char. E não vai rolar. O parâmetro delim é opcional em C++. Isso se chama function overloading e quer dizer que você pode ter várias funções com o mesmo nome desde que tenham algum parâmetro diferente. O compilador se vira para chamar a certa.

 

Em C++ string é uma classe e você pode comparar diretamente variáveis desse tipo. Não precisa de funções porque o operador = foi "treinado" para essa classe

 

strcmp() está disponível, bem como toda a família dessas funções, mas operam com char* e em casos de programas de iniciação raramente se espera em um programa em C++ ver essas funções.

 

E é bom dizer que usar strings é muito muito mais fácil...

 

Diga o que está tentando fazer com esse programa e podemos escrever um outro exemplo em C++, ou um em C e outro em C++ pra ajudar a ver as possíveis diferenças.

 

adicionado 26 minutos depois
27 minutos atrás, arfneto disse:

bit   ---  que é a mesma coisa que *(bit + i)

 

Cansei de tentar corrigir isso no site. Por favor imagine que eu tenha digitado certo desde o início

 

bit [ i ]  --- que é a mesma coisa que *(bit+i) --- é um char, devido ao *

 

off-topic: às vezes aqui demora mais para formatar o texto do que para escrever um programa de teste para o tópico :( podiam aceitar um documento formatado talvez, ou caprichar mais nessa ferramenta de edição. Por 4 vezes digitei isso e a alteração sumiu

adicionado 29 minutos depois

Hum..... sumiu de novo. Ao que parece o código do site na edição não entende aquela linha se eu digitar como está no código mas como texto. E foi preciso inserir espaços entre os colchetes e o índice ou o texto sumia de novo :D:D:D

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!