Ir para conteúdo
Fórum Script Brasil

Beraldo

Veteranos
  • Total de itens

    4.466
  • Registro em

  • Última visita

Tudo que Beraldo postou

  1. Beraldo

    Matriz int x Matriz char

    Se eu entendi bem a pergunta, o que você quer fazer é isto: #include <stdio.h> #include <stdlib.h> #include <string.h> char * return_str() { char str[] = "Beraldo"; return str; } int main() { char str[10]; strcpy(str, return_str()); printf("%s\n", str); return 0; } Isso não funciona. Veja a saída: $ gcc -Wall teste2.c -o teste2 && ./teste2 teste2.c: Na função ‘return_str’: teste2.c:9: aviso: function returns address of local variable ՜6 O programa compila, mas o valor de str não é definido. Não sei se entendi bem essa pergunta... Cada tipo de dado possui um determinado tamanho. Isso varia conforme a arquitetura do computador. Isso é uma diferença entre int e char.
  2. tem que usar o modo "r+" e usar fseek() para mudar a posição do ponteiro do arquivo "a+" vai deixar o ponteiro sempre no fim do arquivo, sem poder movê-lo para o início
  3. Beraldo

    IDE

    Programo em C há pouco tempo e nunca usei IDE's, mas, sinceramente, para começar, nada melhor que usar um simples editor de texto, até entender a sintaxe da linguagem, familiarizar-se com as funções etc.
  4. Esquematize tudo num papel. Repare bem nos índices de cada elemento das matrizes. tente implementar. Poste as dúvidas e dificuldades.
  5. Melhor assim, mesmo, pois não adianta pegar uma string e convertê-la para float. É mais eficiente pegar como float logo de cara. Interessante o seu programa. Sempre tive um certo bloqueio intelectual com a área de Elétrica... deve ser um trauma de vidas passadas... :lol:
  6. Aqui há a sintaxe, a descrição e ume xemplo: http://www.cplusplus.com/reference/clibrar...tdlib/rand.html
  7. Aqui roda normal: int main() { char str[] = "-2.87604039957841E-1"; float num = atof(str); printf("%f\n", num); return 0; } Execução: $ gcc -Wall teste2.c -o teste2 && ./teste2 -0.287604 $ Poste o código que você utilizou.
  8. Você pode instalar as manpages em português. :) Basta instalar o pacote certo e alterar o valor da variável de ambiente $LANG. Veja: http://lists.debian.org/debian-user-portug...6/msg00293.html
  9. Sua dúvida me fez ficar inquieto... :) Deve haver uma forma de fazer o que você quer. Cheguei a isto: #include <curses.h> int main() { WINDOW *win; int i = 0, key; win = initscr(); noecho(); cbreak(); keypad(win, TRUE); scrollok(win, TRUE); while ( (key = getch()) ) { switch ( key ) { case KEY_UP: scrl(-1); break; case KEY_DOWN: scrl(1); break; default: printw("%d................................\n", i++); } } endwin(); return 0; } A rolagem funciona (com as setas do teclado), mas o conteúdo que foi "rolado" para além dos limites do terminal some. Deve haver como fazer algo parecido com os comandos more ou less. Vamos dar um jeito, sim. Se eu achar a resposta, coloco-a aqui. ;)
  10. Consegui fazer o que deseja usando scrollok: http://www.linuxmanpages.com/man3/scrollok.3x.php #include <stdio.h> #include <curses.h> int main(void) { char r; WINDOW *win; win = initscr(); scrollok(win, TRUE); do { printw("\n\n\tTestando...\n\n\n\n\n\n\n\n\tDeseja repetir? (s/n)"); noecho(); r = getch(); while(r!='s' && r!='n') { printw("\n\tResponda usando 's' para 'sim' e 'n' para 'não'.\n\tE então? Deseja repetir?"); r = getch(); } } while('s' == r); endwin(); } Mas a barra de rolagem não fica ativa. Aliás, acho que não dá para mantê-la ativa, pois a NCURSES é uma outra interface, apesar de usar a interface do Terminal
  11. Primeiramente, as palavras não precisam, necessariamente, terem os mesmos tamanhos. Logo a posição 9 pode não ser a última letra. use fgets() em vez de gets() Um exemplo da base do programa: # define LINHA 4 # define COLUNA 10 #include<stdio.h> #include <string.h> int main (void) { char palavras[10][12]; int i = 0, total_palavras = 0; do { printf("Digite a palavra: "); fgets(palavras[total_palavras], 12, stdin); palavras[total_palavras][strlen(palavras[total_palavras]) - 1] = ''; total_palavras++; } while ( strcmp(palavras[total_palavras], "fim") && total_palavras < 10); for (i = 0; i <= total_palavras; i++) { if (palavras[i][strlen(palavras[i]) - 1] == 'r') { printf("A última é 'R': %s\n", palavras[i]); } } return(0); } Agora vai tentando e poste as dúvidas. Embaixo do fegts(), coloquei uma linha que retira o \n inserido pelo fgets().
  12. Para usar os caracteres de escape no echo (\a, \n etc) é necessário usar a opção -e: $ echo -e "hello\nworld\a" A opção -n não quebra a linha no fim da exibição da mensagem. Isso é útil em alguns programinhas em Shell Script, ao solicitar um dado para o usuário. :) Um detalhe legal do sort é que ele pode trabaljar com colunas. Você pode ordenar por uma determinada coluna. Descobri isso numa prova de programação Shell. Com a opção -t, define-se o separador de colunas. Com -k, a coluna Por exemplo, para ordenar um diretório pelo número ascendente do tamanho dos arquivos: $ ls -l | tr -s " " | sort -n -t" " -k 5 sed e awk são incríveis também. Talvez eles mereçam um tópico especial. :)
  13. Para buscar uma palavra que correponde ao comando ou a descrição dele, pode-se usar a opção -k: $ man -k print ----- Às vezes, a página do manual é muito grande e queremos encontrar uma palavra específica, ou uma opção. Para isso, basta entrar na manpage, digitar a barra (/), digitar a palavra a ser buscada e teclar ENTER. Todas as ocorrências da palavra serão destacadas. Dá para navegar por elas teclando n (next).
  14. Mas o usuário Halfar já existe e é ativo: http://scriptbrasil.com.br/forum/index.php?showuser=5309 Não há como mudar o seu nome de exibição, pois já há outro Halfar. Você deve estar se confundindo. Você se cadastrou com esse nome em algum outro lugar. No seu Histórico de Nomes de Exibição não aparece Halfar: http://scriptbrasil.com.br/forum/index.php...mes&id=1890
  15. Isso simplesmente diz o seguinte: faça uma função para receber os dados da entrada padrão e outra, para exibi-los. Só isso. É só passar os parâmetros por referência. No caso do Pascal, entenda "função", que escrevi, como "procedimento", posi não é necessário retornar valor nessas ações
  16. strcpy (matriz [linha], palavras[pos]);
  17. Não é complicado, não. Escreva num papel o que o programa deve fazer, o que deve receber, calcular etc. Tente implementar. Poste as dúvidas/dificuldades.
  18. assim: #include <stdio.h> #include <stdlib.h> #include<string.h> int main() { char src[3][20] = {"palavra1", "palavra2", "palavra3"}; char dest[3][20]; int i = 0; for (i = 0; i < 3; i++) { strcpy(dest[i], src[i]); } for (i = 0; i < 3; i++) { printf("%s\n", dest[i]); } return 0; } isso copia as palavras de src para dest
  19. Não. Você tem salvar cada palavra num índice do vetor. Por exemplo: palavras_a[indice_do_vetor] = palavras[indice_do_loop];
  20. Beraldo

    (Resolvido) Arquivos

    Faça assim no while: while(fread(&temp,sizeof(registro),1,ptrArq)) E, claro, retire o fread() de dentro do bloco do while Isso funciona pois fread() retorna o número de ítens lidos. Eu tive o mesmo problema com feof(), mas não descobri o motivo. Se eu descobrir, posto aqui
  21. Desculpe-me. Eu que estou falando besteira. Você está comparando caracteres. Está certo o que você fez no primeiro post. Mas se fosse comparar palavras com strcmp(), faria assim: if ( strcmp(palavras[pos], "palavra" ) == 0) /* palavras iguais */ else /* palavras diferentes */
  22. pessoas[0], não. Você tem que especificar a variável da struct que deseja imprimir. Por exemplo: pessoas[0].nome pessoas[0].idade ... Concordo com o Durub que structs facilitam, não dificultam. :) E vale lembrar que, em termos de memória, tanto faz colocar variáveis em structs ou isoladamente. O uso de memória é igual. Por exemplo: int pos_x = 5 int pos_y = 7; struct ponto { int pos_x; int pos_y; }; struct ponto var; var.pos_x = 5; var.pos_y = 7; Esses dois exemplos ocupam o mesmo tamanho de memória. Por isso não há desvantagem em usar structs.
  23. Não. Veja: http://www.cppreference.com/wiki/c/string/strcmp strcmp() é uma função, não um operador. Ela retorna zero se as duas strings forem iguais
×
×
  • Criar Novo...