Lorenz 0 Denunciar post Postado Setembro 22, 2010 eae galera to fazendo um programa, que pelo que eu to passando esse ta sendo bem dificinho de acerta, ai to pedindo mais uma ajuda de voces. #include <stdio.h> #include <stdlib.h> #include <string.h> int main () { int en, ec; char *nc, *c, es; float l; nc = malloc(sizeof(char)* 4); c = malloc(sizeof(char)* 4); do { printf ("\n\nDe o numero de carbonos pelo numero:\n\n"); printf ("\t(1)...1 Carbono\n"); printf ("\t(2)...2 Carbonos\n"); printf ("\t(3)...3 Carbonos\n"); printf ("\t(4)...4 Carbonos\n"); printf ("\t(5)...5 Carbonos\n"); printf ("\t(6)...6 Carbonos\n"); printf ("\t(7)...7 Carbonos\n"); printf ("\t(8)...8 Carbonos\n"); printf ("\t(9)...9 Carbonos\n"); printf ("\t(10)...10 Carbonos\n"); printf ("\t(11)...11 Carbonos\n"); scanf("%d", &en); } while ((en<1)||(en>11)); switch (en) { case 1: nc='Met'; break; case 2: nc='Et'; break; case 3: nc='Prop'; break; case 4: nc='But'; break; case 5: nc='Pent"; break; case 6: nc='Hex"; break; case 7: nc='Hept'; case 8: nc='Oct'; break; case 9: nc='Non'; break; case 10: nc='Dec'; break; case 11: nc='Undec'; break; } printf("A cadeia e saturada(s/n)?"); scanf("%s", &es); if(es=='s') { printf("%seno\n", nc); free(nc); nc = NULL; system("pause"); return 0; } else if(es=='n'); { do { printf("Como as cadeias são,responda pelo numero:\n"); printf("(1)...Uma cadeia dupla\n"); printf("(2)...Uma cadeia tripla\n"); printf("(3)...Duas cadeias duplas\n"); printf("(4)...Duas cadeias triplas\n"); printf("(5)...Uma cadeia dupla e uma cadeia tripla\n"); scanf("%d", &ec); } while ((ec<1)||(ec>5)); switch (ec) { case 1: c='eno'; break; case 2: c='ino'; break; case 3: c='dieno'; break; case 4: c='diino'; break; case 5: c='enino'; break; } printf("Aonde a(s) cedeia(s) se encontram(divida por virgula se tiver mais de uma):\n"); scanf("%f", &l); printf("%s%f%s", nc,c,l); } free(nc); free(c); nc = NULL; c = NULL; system("pause"); return(0); }da um help ai galera, vlws Compartilhar este post Link para o post Compartilhar em outros sites
quitZAUMMM 18 Denunciar post Postado Setembro 22, 2010 Você não falou ql o problema? olhando meio por cima faça algo assim: strcpy(nc, "Met); []s Compartilhar este post Link para o post Compartilhar em outros sites
guidjos 65 Denunciar post Postado Setembro 22, 2010 strncpy(nc, "Met", 4); Nem li o resto, só corrigindo o erro de digitação acima. Só uma dica: você não precisa usar sizeof(char). Por definição, sizeof(char) é 1. Ou seja, faça: nc = malloc(4); Compartilhar este post Link para o post Compartilhar em outros sites
Lorenz 0 Denunciar post Postado Setembro 22, 2010 seria bom eu dividir esse programas em varios blocos? Compartilhar este post Link para o post Compartilhar em outros sites
guidjos 65 Denunciar post Postado Setembro 23, 2010 seria bom eu dividir esse programas em varios blocos? Há um consenso geral em certas comunidades de programação que dita que, se um bloco de código não cabe na tela do computador, ele é grande demais e deve ser dividido em mais funções. Outra "regra", mais extrema (e, na minha opinião, menos certa), diz que caso você nunca deve precisar copiar e colar código. Compartilhar este post Link para o post Compartilhar em outros sites
Sileno De Oliveira Brito 2 Denunciar post Postado Setembro 23, 2010 Bom dia, pelo que entendi o que você queria seria mais ou menos isso. Eu nao tive como testar, mas rescrevi o que eu achei que nao estava funcionado. Acho que o maior erro estava em tentar atribuir inteiro a um vetor de string. Se não for isso fala onde deu problema para tentarmos lhe ajudar. Deu erro para mim so no system("pause"), mas pq compilei em linux. #include <stdio.h> #include <stdlib.h> #include <string.h> int main () { int en, ec; char *nc, *c, es; float l; nc = malloc(sizeof(char)* 4); c = malloc(sizeof(char)* 4); do { printf ("\n\nDe o numero de carbonos pelo numero:\n\n"); printf ("\t(1)...1 Carbono\n"); printf ("\t(2)...2 Carbonos\n"); printf ("\t(3)...3 Carbonos\n"); printf ("\t(4)...4 Carbonos\n"); printf ("\t(5)...5 Carbonos\n"); printf ("\t(6)...6 Carbonos\n"); printf ("\t(7)...7 Carbonos\n"); printf ("\t(8)...8 Carbonos\n"); printf ("\t(9)...9 Carbonos\n"); printf ("\t(10)...10 Carbonos\n"); printf ("\t(11)...11 Carbonos\n"); scanf("%d", &en); } while ((en<1)||(en>11)); switch (en) { case 1: nc = strdup("Met"); break; case 2: nc = strdup("Et"); break; case 3: nc = strdup("Prop"); break; case 4: nc = strdup("But"); break; case 5: nc = strdup("Pent"); break; case 6: nc = strdup("Hex"); break; case 7: nc = strdup("Hept"); break; case 8: nc = strdup("Oct"); break; case 9: nc = strdup("Non"); break; case 10: nc = strdup("Dec"); break; case 11: nc = strdup("Undec"); break; } printf("A cadeia e saturada(s/n)?"); scanf("%s", &es); if(es=='s'){ printf("%seno\n", nc); free(nc); nc = NULL; system("pause"); return 0; } else if(es=='n'){ do{ printf("Como as cadeias são,responda pelo numero:\n"); printf("(1)...Uma cadeia dupla\n"); printf("(2)...Uma cadeia tripla\n"); printf("(3)...Duas cadeias duplas\n"); printf("(4)...Duas cadeias triplas\n"); printf("(5)...Uma cadeia dupla e uma cadeia tripla\n"); scanf("%d", &ec); }while ((ec<1)||(ec>5)); switch(ec){ case 1: c = strdup("eno"); break; case 2: c = strdup("ino"); break; case 3: c = strdup("dieno"); break; case 4: c = strdup("diino"); break; case 5: c = strdup("enino"); break; } printf("Aonde a(s) cedeia(s) se encontram(divida por virgula se tiver mais de uma):\n"); scanf("%f", &l); printf("%s%f%s", nc,c,l); } free(nc); free(c); nc = NULL; c = NULL; system("pause"); return(0); } Só esqueci de falar uma coisa com o comando abaixo não é necessário no codigo acima nc = malloc(sizeof(char)* 4); c = malloc(sizeof(char)* 4); O motivo é que o comando strdup vai criar uma area de memoria do tamanho necessário para armazenar o vetor de char e vai te passar o ponteiro desse endereço de memoria. E como não há mais nada no programa pois esse é o main. ao terminar o programa ele já vai liberar a memoria que o programa estava usando. free(nc); free(c); Compartilhar este post Link para o post Compartilhar em outros sites
Lorenz 0 Denunciar post Postado Setembro 23, 2010 Vlw sileno. so tive que corrigir o printf("%s%f%s", nc,c,l);que as variaveis estavam fora de ordem, e agora fico perfeitovlw cara abraços Compartilhar este post Link para o post Compartilhar em outros sites
quitZAUMMM 18 Denunciar post Postado Setembro 23, 2010 Por isso eu nunca aconselho a fazer chamadas ao sistema operacional, pois como você viw, o linux não deve ter aceito o system("pause"); []s Compartilhar este post Link para o post Compartilhar em outros sites
Sileno De Oliveira Brito 2 Denunciar post Postado Setembro 23, 2010 De nada, foi um prazer. Compartilhar este post Link para o post Compartilhar em outros sites