Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

gRoOvE

Validação com string

Recommended Posts

bom, tenho o seguinte código, mas ali no while passa direto, não sei oq pode estar acontecendo...

 

#include "stdafx.h"
#include "stdlib.h"
#include "string.h"
#define N 2

void main(void)
{
	char disciplina[N][50];
	int i=0;

	
	while(disciplina[i] != "sair")
	{
		printf("\nDigite o nome da disciplina:");
				scanf("%s",disciplina[i]);
		fflush(stdin);

		
		printf("\n%s",disciplina[i]);
		printf("\n%d",i);
		i++;
	}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Inicialize as variáveis antes de usar. Pode até ser com "".

Tem algum debugger nesse visual C++?? É bom você comecar a aprender a usar um enquanto as coisas são pequenas.

 

Esta passando direto como?

 

Detalhe: você não esta conferindo o valor de i. Vai dar falha de segmentação.

Compartilhar este post


Link para o post
Compartilhar em outros sites

nao sei usar debugger ainda

passa direto, ao digitar "sair" nao sai do laço

 

como nao estou conferindo valor de i ??

 

ql a finalidade de inicalizar as variaveis ??

 

#include "stdafx.h"
#include "stdlib.h"
#include "string.h"
#define N 2

void main(void)
{
	char disciplina[N][50];
	int i=0;

	do{
		printf("\nDigite o nome da disciplina: ");
		scanf("%s",disciplina[i]);
	}while(strcmp(disciplina[i++],"sair") != 0);
}
dessa forma deu certo, mas nao intendi como funciono o disciplina[i++] ali,

#include "stdafx.h"
#include "stdlib.h"
#include "string.h"
#define N 2

void main(void)
{
	char disciplina[N][50];
	int i=0;

	do{
		printf("\nDigite o nome da disciplina: ");
		scanf("%s",disciplina[i]);
		i++;
	}while(strcmp(disciplina[i],"sair") != 0);
}
tentei fazer assim, que seria a mesma coisa e nao deu certo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dessa forma funciona...

 

#include "stdafx.h"
#include "stdlib.h"
#include "string.h"
#define N 2

void main(void)
{
	char disciplina[N][50];
	int i=0;

	
	while(strcmp(disciplina,"sair")!=0) //alteração realizada
	{
		printf("\nDigite o nome da disciplina:");
				scanf("%s",disciplina[i]);
		fflush(stdin);

		
		printf("\n%s",disciplina[i]);
		printf("\n%d",i);
		i++;
	}
}
Não é ideal adicionar indice à variavel disciplina,

já que a função strcmp compara string com string, e não character com string...

 

Falow...!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites
nao sei usar debugger ainda

 

Devia começar a aprender. 80% das coisas dá pra pegar via debugger.

 

passa direto, ao digitar "sair" nao sai do laço

Vai sair porque a comparação é feita somente no início.Vai ter que colocar um if-break ou if e um bloco pra leitura das notas.

 

 

como nao estou conferindo valor de i ??

 

while(strcmp(disciplina,"sair")!=0) //alteração realizada
{
	printf("\nDigite o nome da disciplina:");
	scanf("%s",disciplina[i]);
	i++;
}

 

você não está alocando dinamicamente. Uma hora a variavel i vai chegar no limite e quando você tentar comparar ou escrever,vai dar falha de segmentacao e o programa termina.

 

while(i<N) //alteração realizada
{
	printf("\nDigite o nome da disciplina:");
	scanf("%s",disciplina[i]);
	if(strcmp(disciplina[i],"sair") == 0)
	   break;
	i++;
}

 

 

ql a finalidade de inicalizar as variaveis ??

 

Não pegar lixo vindo da memória. Em Java, se você não inicializar as variáveis,o programa nem compila.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não é ideal adicionar indice à variavel disciplina,

já que a função strcmp compara string com string, e não character com string...

e como o while vai verificar cada disciplina ?? tratando-se de uma matriz, teria que verificar cada indice, não ??

 

Isis, posso verificar o limite de i e a condição de sair

 

while( (i<N) || (strcmp(disciplina,"sair")!=0)) //alteração realizada
	{
		printf("\nDigite o nome da disciplina:");
		scanf("%s",disciplina[i]);
		if(strcmp(disciplina[i],"sair") == 0)
		   break;
		i++;
	}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nao precisa colocar no while. Se você inicializou com "" a string,ja sabe q eh diferente de sair...

Se você digitar a string "sair", você pára o laço com break (não importando se i =0 ,1 ou N-2).Ele não vai voltar pro começo pra verificar se é igual ou diferente...

 

Tendo inicializado o i dá pra fazer um do-while porque o laco VAI ter que executar uma primeira vez p/ pegar a string. A não ser que você defina i>= N na inicializacao de bobeira.Daí o while (i<N) faz sentido.

 

int i = 0; // N > i
char disciplina[N][M];
memset(disciplina,(int)'\0',sizeof(char)*N*M);

do 
{
	printf("\nDigite o nome da disciplina:");
	scanf("%s",disciplina[i]);
	if(strcmp(disciplina[i],"sair") == 0)
	   break;
	i++;
} while (i<N);

 

Detalhe que tua condição tá errada. Suponha que você tenha 5 arrays de strings

 

while( (i<N) || (strcmp(disciplina,"sair")!=0))

 

Mesmo se você digitar "sair", i=1 < 5 e o laço continua executando.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.