gRoOvE 0 Denunciar post Postado Maio 26, 2008 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
_Isis_ 202 Denunciar post Postado Maio 26, 2008 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
gRoOvE 0 Denunciar post Postado Maio 26, 2008 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
andersonsobrado 0 Denunciar post Postado Maio 26, 2008 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
_Isis_ 202 Denunciar post Postado Maio 26, 2008 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
gRoOvE 0 Denunciar post Postado Maio 26, 2008 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
_Isis_ 202 Denunciar post Postado Maio 26, 2008 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