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

Discussão em 'Programação' iniciada por perinhas, 23 de Novembro de 2008. (Respostas: 17; Visualizações: 958)

  1. perinhas

    perinhas What is folding?

    Bem tenho que fazer um programa que dadas 10 cidades, imprimir algo como isto:

    Vila Real
    V. R.


    Cidade e iniciais seguidas de um .

    Já consegui armazenar as cidades e mostra-las, mas o problema está nas iniciais, que só consigo imprimir a primeira. Se alguém me puder ajudar...

    Código:
    #include <stdio.h>
    #include <conio.h>
    #include <stdlib.h>
    #define LINHAS 10
    #define COLUNAS 50
    
    typedef struct
    {
            char nome [LINHAS][COLUNAS];
    }CIDADE;
    
    CIDADE armazenar_dados (CIDADE cidades[LINHAS][COLUNAS]);
    CIDADE iniciais (CIDADE cidades[LINHAS][COLUNAS]);
    
    int main (void)
    {
        CIDADE cidades[LINHAS][COLUNAS];
        int i;
        armazenar_dados(cidades);
        system("cls");
        for (i=0;i<LINHAS;i++)
        {
        printf ("%s\n", cidades[i]);
        }
        iniciais (cidades);
        getch();
    }
    
    CIDADE armazenar_dados (CIDADE cidades[LINHAS][COLUNAS])
    {
           int i;
           
    for (i=0;i<LINHAS;i++)
    {
        printf("Introduza a %da cidade.\n", i+1);
        fflush(stdin);
        gets(cidades[i]);
    }
    }
    
    CIDADE iniciais (CIDADE cidades[LINHAS][COLUNAS])
    {
    int i;
    for (i=0;i<LINHAS;i++)
    {
        printf("%c.\n", cidades[i][0]);
        if (cidades[i] == ' ')
           printf("%c", cidades[i+1]);
    }
    }
    
     
  2. raVemjr

    raVemjr I'm cool cuz I Fold

    Acho que estás a complicar o problema em demasia. Precisavas mesmo de fazer aquela struct? Sugeria que pusesses o nome de cada cidade dentro de um simples string, que depois poderias tratar com um strtok com token ' '. Assim partias a String por espaços, e cada vez que a partisses, imprimias o primeiro caracter dessa partição...
     
  3. perinhas

    perinhas What is folding?

    Sim, o exercício diz para criarmos uma estrutura que armazene 10 cidades...
     
  4. Angelizer

    Angelizer Power Member

    Código:
    CIDADE iniciais (CIDADE cidades[LINHAS][COLUNAS])
    {
    int i;
    for (i=0;i<LINHAS;i++)
    {
        printf("%c.\n", cidades[i][0]);
        if (cidades[i] == ' ')
           printf("%c", cidades[i+1]);
    }
    }
    tu aki so estas a percorrer as linhas ... deves tb percorrer as colunas ate encontrares um espaço e imprimir o ke esta asseguir...***** do genero

    Código:
    for (i=0;i<LINHAS;i++)
    {
        printf("%c .", cidades[i][0]);
        for (j=0;j<colunas;j++){
           if (cidades[i][j] == ' ')  printf("%c .", cidades[i][j+1]);
           if (cidades[i][j] == ' \0') j=50;
        }
       printf("\n");
    }
    acho k assim da ;)...espero ke tenha ajudado
     
  5. perinhas

    perinhas What is folding?

    Dá-me estes erros:

    C:\U...: In function `iniciais':
    C:\U...:48: error: invalid operands to binary ==
    C:\U...:50:31: warning: multi-character character constant
    C:\U...:50: error: invalid operands to binary ==

    Não percebo porquê...já vi todas as linhas de código e não falta nada.
     
  6. IComeFromBehind

    IComeFromBehind Power Member

    if (cidades[j] == ' \0') j=50; O erro ta aqui, ele tentou delcarar um char com dois chars la dentro
     
  7. Angelizer

    Angelizer Power Member

    ya lol dei um espaço sem querer :P

    deveria ser
    if (cidades[j] == '\0') j=50;
     
  8. perinhas

    perinhas What is folding?

    Continua a dar este erro...

    C:\...:48: error: invalid operands to binary ==

    C:\...:49: error: invalid operands to binary ==

    Será que é por estar a comparar uma estrutura com algo?
     
  9. raVemjr

    raVemjr I'm cool cuz I Fold



    Não...\0 é um char só...
     
  10. IComeFromBehind

    IComeFromBehind Power Member

    Se tivesses dois palmos de testa tinhas pensado e verificado mais um bocadinho antes de responder...
     
  11. Neptune

    Neptune 1st Folding then Sex

    Código:
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <ctype.h>
    #define LINHAS 10
    #define COLUNAS 50
    
    typedef struct CIDADES_ {
        char nome [LINHAS][COLUNAS];
        char iniciais [LINHAS][COLUNAS];
    } CIDADES;
    
    void armazenar_dados (CIDADES *c);
    void iniciais (CIDADES *c);
    void NullTerminator(char *string);
    
    int main (void) {
        CIDADES *c;
        int i,j;
        armazenar_dados(c);
        iniciais (c);
        printf("Lista de cidades e suas iniciais:\n");
        for (i=0;i<LINHAS;i++) {
            j=0;
            printf ("%s\n", c->nome[i]);
            while (c->iniciais[i][j]!= '\0')
                printf ("%c.",c->iniciais[i][j++]);
            printf ("\n");
        }
        getch();
        return 0;
    }
    
    void armazenar_dados (CIDADES *c) {
        int i;
        for (i=0;i<LINHAS;i++) {
            printf("Introduza a %da cidade.\n", i+1);
            fgets (c->nome[i],COLUNAS,stdin);
            NullTerminator(c->nome[i]);
            fflush(stdin);
        }
    }
    
    void NullTerminator(char *string) {
        if (strchr(string,'\n'))
            *strchr(string,'\n')='\0';
    }
    
    void iniciais (CIDADES *c) {
        int i,j;
        char *str;
        char tmp[COLUNAS];
        for (i=0;i<LINHAS;i++) {
            j=0;
            strcpy(tmp,c->nome[i]);
            str=strtok (tmp," ");
            while (str != NULL) {
                c->iniciais[i][j++]=toupper(str[0]);
                str = strtok (NULL, " ");
            }
            c->iniciais[i][j]='\0';
        }
    }
     
  12. perinhas

    perinhas What is folding?

    Não tem nenhum ciclo infinito por ai? É que ao introduzir a primeira cidade, o programa deixa de funcionar logo.
     
  13. Neptune

    Neptune 1st Folding then Sex

    Testado em Linux funciona perfeitamente. Pode ser algo específico do compilador em Windows. Depois vejo isso se puder.
     
  14. perinhas

    perinhas What is folding?

    Obrigado ^^
     
  15. perinhas

    perinhas What is folding?

    BUMP...precisava disto para hoje por favor :005:
     
  16. tiagoix

    tiagoix Power Member

    eu tenho aqui uma duvida que nao sei se é possivel realizar... :P
    tenho um programa que está a correr sob forma de um processo que tanto pode receber coisas da linha de comandos como coisas vindas de uma socket, alguem me sabe explicar como faço isto sem ter de parar o processo ciclico ???????
     
  17. Neptune

    Neptune 1st Folding then Sex

    Não tenho tido tempo para experimentar isso a sério, mas vi que esta implementação apenas dá problemas em windows durante a leitura do nome das cidades para a estrutura. Sugestão: esquece Windows. C + Linux e xau problemas.

    Se o que queres é multitasking vais ter que criar ou processos filhos ou threads. No teu caso, e se bem entendi essa explicação um bocado confusa, queres que o programa trate ao mesmo tempo de um socket e de inputs pelo stdin. Isso pode-se fazer com um select em simultaneo ao stdin e ao socket ou então tendo um processo/thread para cada um. No entanto, para tratar as ligações ao socket vais ter sempre que usar ou processos ou threads porque caso contrário, só podes ter 1 cliente ligado de cada vez.
     
  18. tiagoix

    tiagoix Power Member

     

Partilhar esta Página