Ir ao conteúdo

C++ Problema com comando WHILE


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

Posts recomendados

Postado

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;
}
	

 

  • Solução
Postado
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
Postado

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

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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!