1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Ajuda em C. Tera isto a ver com classes?-.-

Discussão em 'Programação' iniciada por PedroPereiraStr, 26 de Novembro de 2007. (Respostas: 16; Visualizações: 827)

  1. PedroPereiraStr

    PedroPereiraStr Power Member

    Pessoal, isto é um prog, q tem uma pequena base de dados em que tem inicializado os dados de determinados planetas. O meu objectivo é ao seleccionar determinada opcao, imprimir um dado valor (distancia media ao sol, massa, raio, numero de satelites, toda a informacao inicializada).



    O codigo que já tenho e julgo correcto e o seguinte:


    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>

    int main(){
    short i;
    struct planeta{
    char nome[10];
    double distancia,massa,raio;
    int lua,no;
    };
    struct planeta p1={"Mercurio",57909E10,3.302E23,2.4397E6,0,1};
    struct planeta p2={"Venus",1.0822E11,4.8685E24,6.0518E6,0,2};
    struct planeta p3={"Terra",1.4712E11,5.9742E24,6.3781E6,1,3};
    struct planeta p4={"Marte",2.2743E11,6.4185E23,3.4024E6,2,4};
    struct planeta p5={"Jupiter",7.7795E11,1.899E27,7.1492E7,63,5};
    struct planeta p6={"Saturno",1.4257E12, 5.6846E26,6.0263E7,56,6};
    struct planeta p7={"Urano",2.8694E12,8.6832E25,2.5559E7,27,7};
    struct planeta p8={"Neptuno",4.4982E12,1.0243E26,2.4764E7,13,8};
    struct planeta p9={"plutao",5.8139E12,1.3050E22,1.1950E6,3,9};
    char nome[]="__________";
    struct planeta *pon[9];
    pon[0]=&p1;
    pon[1]=&p2;
    pon[2]=&p3;
    pon[3]=&p4;
    pon[4]=&p5;
    pon[5]=&p6;
    pon[6]=&p7;
    pon[7]=&p8;
    pon[8]=&p9;

    printf("\tPrograma Ex4s5\n");
    printf("\n Prima uma tecla para continuar.\n ");
    getch();
    printf("\nº=================================================º\n");
    do{
    printf("\n Insira o nome dum planeta do sistema solar:\n ");
    scanf("%s",&nome);
    nome[strlen(nome)]='\0';
    if(!(strcmp(nome,"Mercurio")) ||!(strcmp(nome,"mercurio"))){
    i=0;
    printf("%s",pon[1]);
    }
    else if(!(strcmp(nome,"Venus")) ||!(strcmp(nome,"venus")))
    i=1;
    else if(!(strcmp(nome,"Terra")) ||!(strcmp(nome,"terra")))
    i=2;
    else if(!(strcmp(nome,"Marte")) ||!(strcmp(nome,"marte")))
    i=3;
    else if(!(strcmp(nome,"Jupiter")) ||!(strcmp(nome,"jupiter")))
    i=4;
    else if(!(strcmp(nome,"Saturno")) ||!(strcmp(nome,"saturno")))
    i=5;
    else if(!(strcmp(nome,"Urano")) ||!(strcmp(nome,"urano")))
    i=6;
    else if(!(strcmp(nome,"Neptuno")) ||!(strcmp(nome,"neptuno")))
    i=7;
    else if(!(strcmp(nome,"Plutao")) ||!(strcmp(nome,"plutao")))
    i=8;
    else{
    i=9;
    printf(" ...erro... planeta nao identificado.\n");
    }
    }
    while(!(i<9));
    printf("\n Escolheu o planeta %s. Que informacao deseja?\n\n(1) Distancia media ao Sol\n(2) Massa\n(3) Raio equatorial medio\n(4) Numero de satelites\n(5) Numero do planeta\n",(*pon).nome);
    getch();
    system("pause");
    getch();
    return 0;
    }





    Ora por exemplo, ao seleccionar a opcao 1, do planeta mercurio, o resultado seria: 57909E10

    Isto claro se o programa estivesse a trabalhar. Alguem dá aqui uma maozinha sff?=P

    Cumps, sem mais....
     
  2. AragTey

    AragTey Power Member

    Boas que erro te dá?

    De qualquer maneira era melhor definires todas as estruturas fora do main, e será mais facil se criares algo como:

    vector<planeta> lista_planetas;

    ficas com um vector de planetas onde é mais facil armezenar e retirar informação.

    Cumps
     
  3. Baderous

    Baderous Banido

    Se por acaso um dos planetas tivesse um nome constituído por 2 palavras este código não funcionava:

    Código:
             scanf("%s",&nome);
    Utiliza antes a função gets que é especificamente destinada a ler strings.

    Código:
    gets(nome);
     
  4. r3pek

    r3pek Power Member

    tao nao funciona? le uma string com espaços pelo meio. desde que caiba dentro do "nome".
     
  5. Baderous

    Baderous Banido

    Já experimentaste? A questão é que o scanf lê até encontrar um <Espaço>, <Enter> ou <Tab>.

    E depois também não funcionava porque ele estava a colocar o & antes de "nome".
     
  6. good_in_bed

    good_in_bed Power Member

    vah...nada de ensinar mal os principiantes!!

    "the gets() function is dangerous and should not be used"

    fgets!!
     
  7. r3pek

    r3pek Power Member

    eh! nao sabia.... ve la as vezes k uso o scanf para ler strings ;)
     
  8. MadOnion

    MadOnion Folding Member

    Exacto, fgets ou scanf(%[^\n], str). Penso que também funciona.
     
  9. Baderous

    Baderous Banido

    Ya, e lês do stdin...
     
  10. HecKel

    HecKel The WORM

    Para a questão em concreto é verdade, no entanto o que dizes não é propriamente verdade no geral.

    O scanf lê de acordo com a formatação definida no argumento, isto é, se tiveres um scanf("%s %s",&a,&b); ele não lê até ao primeiro espaço que encontrar, mas sim algo com a forma string espaço string ;)
     
  11. PedroPereiraStr

    PedroPereiraStr Power Member

    oh pessoal isto está a dar assim: o programa executa todo, isto é eu coloco o nome do planeta, dps aparece o segundo menu para dizer se quero a massa ou a distancia etc etc, mas depois eu selecciono por exemplo a massa, e não mostra e o programa ("linha de comandos") fecha.


    Soluções?...

    Cumps
     
  12. AragTey

    AragTey Power Member

    pelo que vejo no teu codigo nao tens nada para mostrar depois de escolheres a opcao.
     
  13. PedroPereiraStr

    PedroPereiraStr Power Member



    lol. O que eu quero é mostrar os dados que pedir. Tipo em cima tenho tudo inicializado (massa dos planetas etc) , e por exemplo se eu pedir a massa de mercurio, "gostava " (lol) que o programa me mostrasse no ecran a respectiva massa. Estoume a fazer entender ou nem por isso?

    Cumps
     
  14. AragTey

    AragTey Power Member

    Epá talvez eu não esteja a perceber, mas parece-me que o que tu queres é semlhante ao que já fizeste, so que depois mostras a massa em vez do nome dos planetas.
     
  15. PedroPereiraStr

    PedroPereiraStr Power Member

    pois, acho que nao estas a perceber. Tenho o codigo de um programa, que supostamente devia imprimir a massa ou a distancia ao sol, ou qualquer outra coisa que já está previamente inicializada aqui:


    struct planeta p1={"Mercurio",57909E10,3.302E23,2.4397E6,0,1};
    struct planeta p2={"Venus",1.0822E11,4.8685E24,6.0518E6,0,2};
    struct planeta p3={"Terra",1.4712E11,5.9742E24,6.3781E6,1,3};
    struct planeta p4={"Marte",2.2743E11,6.4185E23,3.4024E6,2,4};
    struct planeta p5={"Jupiter",7.7795E11,1.899E27,7.1492E7,63,5};
    struct planeta p6={"Saturno",1.4257E12, 5.6846E26,6.0263E7,56,6};
    struct planeta p7={"Urano",2.8694E12,8.6832E25,2.5559E7,27,7};
    struct planeta p8={"Neptuno",4.4982E12,1.0243E26,2.4764E7,13,8};
    struct planeta p9={"plutao",5.8139E12,1.3050E22,1.1950E6,3,9};


    e quando escrevo mercurio e a distancia do sol deveria aparecer 57909E10 e não aparece simplesmente nada ( a janela sai). Nao percebo porque é que nao aparece nada :( que stress :( : @

    Cumps
     
  16. Baderous

    Baderous Banido

    Tens de indicar quais são os campos da struct que queres mostrar.

    p1.distancia
    p1.raio
    p1.lua
    ...etc, acompanhado do respectivo formato de escrita.
     
  17. AragTey

    AragTey Power Member

    Boas, mas tu quando pedes essa informcao (massa, distancia, etc...) não tens depois nenhum ciclo para a escreveres.

    Da mesma maneira que tens um ciclo do....while para a escolhe do planeta, tens de também ter um ciclo do...while para que quando recebes a opcao 1,2,3,4,5 para saber dist, massa, raio, satelites, numero.... imprimir essa informacao, da mesma maneira que fizeste para o caso do nome.

    EDIT: ou fazes como o Baderous sugeriu e escreves tudo de uma assentada sem perguntar ao utilizador o que deseja ver.
     

Partilhar esta Página