Ir para conteúdo

POWERED BY:

Arquivado

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

Lorenz

[Resolvido] Problema em construção de um programa

Recommended Posts

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

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

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

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

Vlw sileno.

so tive que corrigir o

printf("%s%f%s", nc,c,l);
que as variaveis estavam fora de ordem, e agora fico perfeito

vlw cara

abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

×

Informação importante

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