iCl4w 0 Denunciar post Postado Novembro 16, 2009 Olá, Estou com um problema a resolver... Estou a fazer um projeto e ele pede que o codigo digitado não possa ser digitado novamente... Tentei usar do-while mas não deu! Acredito que o maior problema seja que nenhuma outra variável foi adicionada, então ele não tem ninguém pra comparar. Aí fica na mesma, pedindo os dados normalmente. O que posso fazer? O que vcs sugerem? Continuo com o do-while? void cad_disciplina() { int i, verigual; char codigodisc[50]; system("cls"); for(i=0; i<6; i++) { do { cout<<"Digite o Codigo: "; gets(codigodisc); verigual=(strcmp(total_disc.dcod_disc,codigodisc)); }while(verigual==0); strcpy(total_disc.dcod_disc,codigodisc); cout<<"Digite a Disciplina: "; gets(total_disc.descr); } getche(); main(); } Aguardo qualquer ajuda e explicação... Abçs... Compartilhar este post Link para o post Compartilhar em outros sites
VictorCacciari 42 Denunciar post Postado Novembro 16, 2009 simplesmente dizer que "não deu" é muito vago. Diga-nos o que se passa. O erro é na hora da compilação ou execução? Compartilhar este post Link para o post Compartilhar em outros sites
iCl4w 0 Denunciar post Postado Novembro 17, 2009 Na execução... Eu digito várias vezes o mesmo código e ele aceita! O que devo fazer? Pensei até em usar o try... Mas, acho que o problema é em ele não reconhecer uma variável inicial! você, por exemplo, como faria pra comparar esse códigos usando estruturas? Aguardo respostas... Compartilhar este post Link para o post Compartilhar em outros sites
VictorCacciari 42 Denunciar post Postado Novembro 17, 2009 A sua condição do loop "do {...} while" está errada. Repare que você manda repetir ENQUANTO a variável "verigual" for igual a zero, se não for, saia do loop. http://www.cplusplus.com/reference/clibrary/cstring/strcmp/ Compartilhar este post Link para o post Compartilhar em outros sites
iCl4w 0 Denunciar post Postado Novembro 18, 2009 Então qual seria o modo correto? void cad_disciplina() { int i, verigual; char codigodisc[50]; system("cls"); for(i=0; i<6; i++) { do { cout<<"Digite o Codigo: "; gets(codigodisc); }while(strcmp(total_disc[i].dcod_disc,codigodisc) !=0 ); strcpy(total_disc[i].dcod_disc,codigodisc); cout<<"Digite a Disciplina: "; gets(total_disc[i].descr); cout<<"Digite a Carga Horaria: "; cin>>total_disc[i].carga_hor; } getche(); main(); } Agora é que está dando errado mesmo... Pois, o nome é pulado! Nossa, é difícil assim fazer isso! Kramba! Que dificuldade... Continuo aguardando ajuda... Compartilhar este post Link para o post Compartilhar em outros sites
VictorCacciari 42 Denunciar post Postado Novembro 18, 2009 Olha só um exemplo: #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { const char *code = "password"; char userCode[50]; do { printf("Type the pass: "); scanf("%49[^\n]%*c", userCode); } while (strcmp(code, userCode) != 0); printf("Well done, you made it!\n"); return 0; } Compartilhar este post Link para o post Compartilhar em outros sites
iCl4w 0 Denunciar post Postado Novembro 18, 2009 É diferente! Pois char code já tem um "valor" determinado que é "password"... No meu caso não há nenhum valor inicial! Assim, é digamos Fácil... Compartilhar este post Link para o post Compartilhar em outros sites
VictorCacciari 42 Denunciar post Postado Novembro 18, 2009 Não há um valor inicial? Então você quer comparar o que com o que em: strcmp(total_disc[i].dcod_disc,codigodisc) !=0 O membro dcod_disc, da estrutura total_disc TEM que ter um valor! Caso contrário, esssa comparação não faz muito sentido! Se você explicar melhor o que você quer fica mais fácil. eu espero que total_disc.dcod_disc seja um ponteiro para char, e que não seja NULL... Compartilhar este post Link para o post Compartilhar em outros sites
iCl4w 0 Denunciar post Postado Novembro 20, 2009 Olha! Irei postar o que o projeto pede! Espero que assim, alguém possa me ajudar realmente! Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Novembro 21, 2009 1- Não use gets. 2- Você está usando cout, então é C++. Se é C++ porque você fica se matando com array de char quando existe a classe string? 3- Evite usar system. 4- O que é aquele main feio perdido no final da função? Compartilhar este post Link para o post Compartilhar em outros sites
iCl4w 0 Denunciar post Postado Novembro 21, 2009 1 - Então o que devo usar? 2 - O uso de string elimina colocar array assim: C char nome[50]; C++ string nome; Correto? Se vou usar string, que função uso para lê-la e compará-la com strcmp? Observe: O código da disciplina não pode ser igual, certo? Então, veja o código: struct aluno { string nome; string disciplina; //Correto, não? }; void cad() { string code; cout<<"Digite o Codigo: "; cin>>code; if (strcmp(total_disc.codigo,code)==0)) for(i=0;i<10;i++) { ... Ok! Mas, e você, o que faria pra comparar esses códigos? Desse jeito vai continuar dando erro, pelo menos acredito! 3 - Se não usar system("cls") que função devo usar? A função clrscr(); não roda no Code::Blocks nem no Dev-C++! 4 - o "main() feio", é o que usei para ele voltar à função principal! É tão estranho assim, fazer isso? Aguardando novas respostas... E agradeço a ajuda... Abçs... Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Novembro 22, 2009 1 - Então o que devo usar? Procure no fórum. O tópico é grande e eu não vou reescrever tudo aqui. 2 - O uso de string elimina colocar array assim: C char nome[50]; C++ string nome; Correto? Se vou usar string, que função uso para lê-la e compará-la com strcmp? http://www.google.com.br/search?q=C%2B%2B+string&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:pt-BR:official&client=firefox-a 3 - Se não usar system("cls") que função devo usar? A função clrscr(); não roda no Code::Blocks nem no Dev-C++! O clear screen é algo que depende do tipo do terminal. http://www.cplusplus.com/forum/articles/9678/ http://www.cplusplus.com/forum/articles/10515/ 4 - o "main() feio", é o que usei para ele voltar à função principal! É tão estranho assim, fazer isso? Não se faz isso. É porco e causa estouro de pilha O que acontece quando uma função é chamada é que um espaço é criado na pilha e lá são colocados o endereço de onde partiu a chamada, os argumentos da função e mais alguns ponteiros ($ebp, $sp - dependendo do tipo da arquitetura). No retorno de uma função, os arugmentos são empilhados e o endereço de origem da chamada é salvo num registrador e uma instrução ret é executada. É isso que faz a função voltar ao ponto de chamada. Alguns loops infinitos e chamadas cruzadas de função e você acaba com a memória disponível do pc e tenta escrever em espaço protegido pelo SO. E depois vem postar perguntando porque o programa fecha na cara. Compartilhar este post Link para o post Compartilhar em outros sites
iCl4w 0 Denunciar post Postado Novembro 22, 2009 Obrigado... Mas, enfim, desculpa porque EM 7 POSTS, eu AINDA não descobri uma maneira de comparar as strings em uma Estrutura! Meu problema ainda NÃO foi resolvido, e eu ganhei um monte de dúvidas pra pesquisar(isso não é uma reclamação, pelo contrário!). Eu CONTINUO aguardando uma solução! Ainda tenho esperança, porque, afinal, esse é um dos melhores fóruns de programação que conheço. Abçs... Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Novembro 23, 2009 Eu já te dei uma solução, mas pelo visto você não clicou no link e não viu o primeiro resultado. Compartilhar este post Link para o post Compartilhar em outros sites
quitZAUMMM 18 Denunciar post Postado Novembro 23, 2009 comece primeiro entendendo oq 'string' tem pronto pra você: http://www.cplusplus.com/reference/string/string/ []s Compartilhar este post Link para o post Compartilhar em outros sites
iCl4w 0 Denunciar post Postado Novembro 24, 2009 Eu resolvi passar todo o código para C. Como iniciante, eu percebi tarde demais que as mudanças do C para C++ não são pequenas... No inicio, eu até achei que a diferença estava no cout e cin! Grande professor que tenho! Mas, estou me esforçando... Irei me dedicar ao C, e depois estudar C++... É o melhor que faço... E agradeço muito a ajuda de vocês... _Isis_ gostaria de informar que os livros que você me indicou tem versões traduzidas... C++ A Linguagem de Programação C++ Absoluto do Savitch [Ótimo] Grande dica! Os livros são ótimos! O do savitch então... do intermediário a avançado! Compartilhar este post Link para o post Compartilhar em outros sites
iCl4w 0 Denunciar post Postado Novembro 24, 2009 strcpy(not_f,tot_m[i].nota_f_um); strcpy(carg_h,tot_d[i].carga_h); strcpy(tot_f,tot_m[i].total_f_um); calc_carg=(0.25 * carg_h); if (not_f<7 && tot_f > calc_carg) printf("O Aluno foi Reprovado na Disciplina!"); else printf("O Aluno foi Aprovado na Disciplina!"); printf("\n"); As variáveis são char... Logo não podem ser colocadas nas operações... Logo, o que DEVO fazer para informar se a nota final for maior que 7 e que o total de faltas seja 25% da carga horária? Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Novembro 24, 2009 Eu sei que existem versões traduzidas, mas nunca leio livro de programação traduzido porque revisão é feita, normalmente, por quem não é da área. E as traduções ficam extremamente porcas. Compre o livro Groovy em Ação e peça seu dinheiro de volta. Compartilhar este post Link para o post Compartilhar em outros sites
iCl4w 0 Denunciar post Postado Novembro 24, 2009 Ué, mas o Groovy em Ação não relacionado a Java? O que eu faria com esse livro? Estranho... Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Novembro 24, 2009 Estranho é alguém não entender um exemplo do que está sendo falado. Compartilhar este post Link para o post Compartilhar em outros sites