Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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);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);
seria bom eu dividir esse programas em varios blocos?
>
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.
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);
} 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);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
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
De nada, foi um prazer.
Você não falou ql o problema?
olhando meio por cima faça algo assim:
strcpy(nc, "Met);
[]s