Ir para conteúdo
Fórum Script Brasil

Arrk

Membros
  • Total de itens

    47
  • Registro em

  • Última visita

Tudo que Arrk postou

  1. Gostaria só de comentar um pouco essa questão. Talvez eu não deva estar falando sobre isso, até pelo que o ursolouco disse disso ser meio chato e tal e também pelo fato do Fc-hardware ser iniciante na linguagem, mas só por uma questão de esclarecimento pra outros usuários: Na realidade o valor já existia. Quando se declara uma variável, aloca-se espaço do tamanho do tipo da variável na memória (que no nosso caso é inteiro) e essa posição contém um valor nela, só não sabemos o que é até imprimir a variável. Então ao não atribuir um valor, é como se você Fc-hardware, estivesse aceitando o valor que já estava lá na posição de memória da sua variável, no endereço correspondente a ela. Logo, esse valor pode ser zero, um, -1, enfim, qualquer coisa. Espero que o comentario seja pertinente ao tópico. Abraços.
  2. Tenho um pouco de experiência com SDL, acho que seria interessante você partir pra SDL, procure além de SDL em si, sobre SDL_mixer... Ah, se quiser material pra estudar, pode me mandar um email que respondo com apostilas e tal. Abraço.
  3. As leituras de chars em geral são bufferizadas, ou seja, ficam em um buffer a espera de uma função de leitura para apanhá-los. Na frase que você citou eu só quis dizer que, como você tava tetando limpar o buffer com a função getchar(), você obrigatoriamente precisava saber quantos caracteres estavam esperando leitura, pra que assim, você possa colocar getchar()'s na mesma quantidade, mas isso seria um tanto absurdo, você teria que lotar o código com inúmeros getchar()'s. Então use uma das duas funções aqui descritas pra limpar o buffer: fflush() ou __fpurge(). E outro detalhe, na frase houve um erro de digitação. Perceba que quando eu falo "buffer com" eu queria dizer na verdade "buffer com ela, (...)", desculpe por isso, hehehe. E por último, a questão do operador ternário, ele é só uma sentença if-else em uma só linha, a sintaxe é aquela do código, não tem nenhum complicação ;D Espero que tenha clareado mais as coisas. Se tiver mais alguma dúvida, pode perguntar. Abraços.
  4. DifusioN, beleza então. Dando uma olhada no seu código, só pra fazer algumas observações: Nesse treço do seu código: printf("Digite o numero de inscricao: "); scanf("%d", &insc); fflush(stdin); printf("\nDigite a idade: "); scanf("%d", &idade); fflush(stdin); você não precisa limpar o buffer antes de ler um inteiro, basta que você o faça depois de ler um char, pois esse pequeno transtorno de dados sobrando pra próxima leitura estão relacionados a algumas funções que lêem char (como gets(), getchar(), etc). Com a função getchar() você não consegue limpar o buffer porque pra limpar o buffer com, ou seja, ler todos os caracteres que estão na fila esperando por uma leitura, você teria que saber quantos caracteres estão esperando, então o correto seria usar uma função específica pra limpar o buffer, como o fflush() ou __fpurge(), nenhuma das duas está funcionando ? E com relação a linha é simples: printf("sexo: %s\n", sex == 'F' ? "feminino" : "masculino"); Não sei se você conhece, mas no C há esse operador condicional ternário que funciona como um if e else numa linha só, a linha em cima funciona da mesma maneira que isso aqui: if(sex == 'F') printf("sexo feminino\n"); else printf("sexo masculino"); Espero que tenha ajudado, []'s
  5. Cara, é o seguinte, presumo que você seja usuário de alguma distro linux, hehehe, justamente pelo fflush() não ter funcionado. No linux a função que realmente limpa o buffer é a __fpurge(): #include <stdio.h> #include <stdio_ext.h> #include <ctype.h> #include <stdlib.h> int main(void){ char sex; do { printf("Digite seu sexo(M-Masculino/F-Feminino): "); __fpurge(stdin); sex = getchar(); sex = toupper(sex); if(sex != 'F' && sex != 'M') printf("Sexo invalido, digite novamente!\n"); } while(sex != 'F' && sex != 'M'); printf("sexo: %s\n", sex == 'F' ? "feminino" : "masculino"); return 0; } A condição do seu laço do-while também estava errada, porque em vez de 'F', você colocou 'S'. Pra não precisar escrever uma condição muito grande, use a função toupper() da ctype.h pra transformar a letra em maiúscula. Espero ter ajudado, []'s
  6. Arrk

    Iniciante no c++

    Que parte do código você não tá conseguindo fazer? Tente ao menos começar, quando for surgindo as dúvidas você posta aqui e a gente tenta ajudar, me desculpa mas do jeito que você falou você já queria que a gente fizesse tudo. Tenta fazer alguma coisa e vai postando dúvidas, pelo enunciado do problema você já sabe que vai precisar de uma struct e laço de repetição. []'s
  7. Arrk

    ofstream

    ios::ate especifica que a posição inicial vai ser o fim do arquivo, já ios::app que todas as operações de saída serão feitas no fim do arquivo, colocando o conteúdo no fim do arquivo. A diferença é pouca, mas tem. =] Abraço.
  8. Correção: biblioteca dinâmica = .dll (windows) e .so (unix like) biblioteca estática = .lib (windows) e .a (unix like) Abraço.
  9. Parece que não tem a ver com o código, porque o erro é na hora do make :T Talvez a versão do DevC++ que você baixou realmente não rode no vista. Me corrijam se eu estiver errado, mas que eu saiba não há versão do DevC++ pro vista. :huh: Abraço.
  10. Arrk

    (Resolvido) socket

    Ae djfarinha, beleza cara? O tipo de retorno da main será int quer você especifique quer não, então por questões de legibilidade, eu particularmente, aconselho espeficiar. Um dos warnings devido a função bzero() estar no header string.h, o qual você não incluiu. O outro warning também é pelo mesmo motivo, agora com o header arpa/inet.h . Tente aí no seu computador agora com as devidas modificações. Aqui a conecção não tá sendo feita, e como meu forte não é sockets vou dar uma pesquisada antes de falar sobre o problema. Espero que por hora eu tenha ajudado. Abraço.
  11. Realmente não tinha notado as linhas 10 e 11 do código dele. Ainda bem que Mnemonic viu, hehehe. Só pra completar o que ele falou, Áquila, tenha cuidado, nas expressões de atribuição os chamados left-value devem ser variáveis ou locais de memória para armazenamento, isso é um erro que você não pode deixar acontecer novamente por ser muito básico. Abraço.
  12. Castro, não entendi muito bem sua última dúvida, você poderia explicar melhor? Vou ter indicar dois sites e dois livros muito bons através dos quais estudo: http://www.cplusplus.com/doc/tutorial http://www.cppreference.com/wiki/ se você explorar esses sites você vai achar várias coisas interessantes. Tem também dois livros que eu recomendo, que são: C++ In Action, Bartosz Milewski - voltado pra "programação industrial" mesmo, design top-down e tudo mais =] C++: Como programar, Deitel - Esse é considerado o melhor livro de C++, é meio carinho mas vale a pena, muito a pena mesmo. Descreve tudo em detalhes. =] Abraço.
  13. Ae Áquila, beleza? Cara, o div do pascal no C é o operador de divisão / , e o resto o operador %. O / não é exatamente um operador igual ao div, o que acontece é que o div do pascal só funcionava com números inteiros. No C o que acontece é que em cada expressão que é avaliada, todos os tipos envolvidos são convertidos ao tipo de maior faixa envolvido na expressão aritmética. Então, quando você faz 1 / 2, você está pegando a parte inteira da divisão, quando você faz 1.0f / 2, o 2 "é convertido para float" e depois é feita a divisão e retornado o resultado: 0.5: #include <stdio.h> int main(int argc, char** argv){ float inteiro = 1 / 2; float quebrado = 1.0f / 2; printf("divisão incompleta: %f, divisão total: %f", inteiro, quebrado); return 0; } EDIT: Adicionei um exemplo. ;D Você também pode especificar outros sufixos para constantes literais afim de "forçar" o compilador a tratar aquelas constantes como tal: 1231213U - sem sinal 3454L - inteiro long 34234e2 - double em notação científica 1e-2 - idem e assim por diante. Espero que tenha entendido. Se tiver mais outra dúvida sinta-se a vontade pra perguntar. Abraço.
  14. Cara, já que você está utilizando arrays de chars pra representar as strings você pode usar funções da biblioteca do C pra comparação de strings: Algo como: if(!strcmp(nome, "produto"){ // realiza produto } Tendo em vista que a função strcmp da biblioteca string.h do C retorna 0 se os dois arrays de char(strings) passados como argumento são iguais. Espero ter ajudado. Abraço.
  15. Vamos com calma, hehehe. São muitas perguntas pra um simples tópico. =] Só queria te dizer que a maioria do que eu falei já presumia que você soubesse um pouco de POO. É importante que você não se resuma a esse tópico pra estudar o que estamos discutindo. Pesquise um pouco, dê uma lida nuns livros. Só se você não passar nenhum argumento pro construtor em questão. Calma, você está confundindo as coisas. O que está sendo alocado é um objeto da classe especificada (especificamente só os seus dados). O construtor é uma função-membro da classe. O que é alocado é o objeto por inteiro. Sim. Na verdade a declaração de um parâmetro "const int num" é sem sentido. O modificador const denota que a variável será constante, ou seja, não poderá ser modificada. Não é necessário pois do jeito que foi declarado vai ser passado por valor, ou seja, o valor da fonte(variável) fornecida na chamada da função é copiado para a variável de parâmetro, o que já impede que a variável original seja modificada pela função. Mais precisamente: "Estou alocando memória para um inteiro, retornando o endereço desse inteiro alocado na memória para integerPtr e inicializando esse endereço com o valor 5". Foi o que você fez aqui: Sugiro que você estude um pouco mais sobre orientação a objetos e C++, nos primeiros posts eu supus que você soubesse o básico de POO e acho que isso foi um erro meu. Espero que você tenha compreendido. Continue estudando. Espero ter ajudado. Abraços.
  16. Arrk

    Iniciante em C =X

    Arnett, Cuidado com o valor de retorno das funções no C. Não se sabe o que vai ser retornado de uma função se o return (algumacoisa); for omitido no final do escopo dela. Fiz um programa baseado no seu: #include <stdio.h> int finteiro(void){ } int main(void) { printf("valor retornado pela função: %d\n", finteiro()); return 0; } A saída desse programa aqui foi: "valor retornado pela função: 2". E se você especificar tipo de retorno void pra main vai gerar um erro de compilação, porque a main tem que ter como tipo de retorno inteiro. E as duas chaves sem nada dentro tem uma razão interessante. No C/C++, quando se declara um array com tamanho definido e não se dá valores a todos os elementos do array, o resto é preenchido com zero. Então o código a seguir geraria o array [ 2 0 0 0 0 ]: int array[5] = {2}; Espero ter ajudado. Abraço.
  17. Arrk

    (Resolvido) fopen

    djfarinha, certifique-se de que você esteja digitando o modo e/ou nome do arquivo corretamente. Por exemplo, nos modos de arquivo w+, r+, etc, veja se o sinal de + está depois da letra. Se ainda sim der erro, veja se o nome do arquivo digitado está correto no caso de modo de leitura, pois se você estiver digitando o nome do arquivo de leitura errado, logicamente não abrirá. Se o erro persistir, verifique as permissões do arquivo ou diretório, se por exemplo a pasta alvo pra criação do arquivo está projegida. Se estiver, altere as permissões da pasta com o chmod. Espero ter ajudado. Abraço.
  18. Ae galera, estou iniciando em Java e estou tendo um problema: Como fazer pra formatar saída de números double e float? Desculpem pela pergunta, mas é que eu não sei quase nada de Java, hehehe. EDIT: Esqueci de postar o código que estou fazendo: class problema{ public static void main(String args[]){ final int terraDiametro = 7600; System.out.println("O volume da terra é: " + (4 * Math.PI * Math.pow(terraDiametro / 2, 3))); } } Só quero calcular o volume da terra mas a saída tá toda bagunçada. Eis aqui a saída do programa: "O volume da terra é: 6.895418883511165E11" Abraço.
  19. Arrk

    (Resolvido) fopen

    Poxa cara, mostra aí a saída do compilador ou o código senão a galera não vai ter como te ajudar né...
  20. Arrk

    DLL, OCX c++

    Ae Moonfall, beleza? Cara, faz tempo que eu não uso windows e estou meio enferrujado nesse assunto xP. Mas aqui mesmo no fórum tem um tutorial show feito pelo Rafael Pacheco ensinando como criar e usar DLL's: http://scriptbrasil.com.br/forum/index.php?showtopic=100232 Espero ter ajudado, Abraço.
  21. Arrk

    Cores Em C

    Só uma ressalva pros leitores que usam linux. Isso só funciona pra sistemas Windows. No linux não existe esse comando color. No linux tem que usar uma versão da conio própria pra linux, usando os recursos de outra biblioteca, a ncurses. Pra mais informações: http://www.vivaolinux.com.br/artigo/Conio.h-para-Linux/ Abraço.
  22. Arrk

    Indicar uma apostila

    Tio google responde: http://www.google.com.br/search?hl=pt-BR&a...uisar&meta= Se você tiver oportunidade, também seria interessante dar uma olhada num livro: C - A linguagem de programação, de Denis Ritchie e Brian Kernighan. Ele tem ótimos exercícios sobre C. Abraço.
  23. Arrk

    C ainda vale a pena?

    Pois vai ver agora, hehehe. De forma alguma "C está caindo fora". Dependendo do propósito da aplicação, pode-se usar C 'puro' ou C++. De fato muitas pessoas hoje aprendem logo C++ e pulam o C. Mas eu particularmente aconselho que você continue como está. Primeiro aprendi C mesmo, depois de mais ou menos uns 7 meses no C, parti pra C++ e hoje não tenho quase nenhuma dificuldade em C++. Vale a pena. Quem parte primeiro pra C, depois, ao se adaptar ao C++, pode entender melhor a linguagem e consequentemente fazer bom uso de seus recursos. Abraço.
  24. Arrk

    Browser na Barra de Tarefas

    Não entendi muito bem sua pergunta, você já tem experiência com alguma API?
  25. Os motivos para alocação dinâmica de objetos são os mesmos para qualquer outro tipo de dados. Um caso interessante pode ser o seguinte, observe o seguinte código: #include <iostream> using std::cout; using std::cin; using std::endl; class Numero{ private: int num_; public: Numero(int num){ set(num); } int get(void){ return num_; } void set(int num){ num_ = num; } void print(void){ cout << get() << endl; } }; int main(void){ Numero *vetor = new Numero[5]; for(int i = 0; i < 5; i++) vetor[i].print(); return 0; } Na linha Numero *vetor = new Numero[5]; resultará em erro, porque como você já deve saber o construtor padrão que o compilador "criava" não pode mais ser chamado porque é definido um construtor que aceita um argumento int. Se você ainda quisesse usar um vetor de objetos e também quisesse seu construtor daquela maneira (com um argumento não-padrão), pra solucionar esse erro você poderia usar alocação diâmica em um vetor de ponteiros pra objetos da classe Numero alí em cima. Mas não precisaria dissso tudo já que você só poderia colocar o único argumento do construtor como um valor padrão, caso nenhum argumento seja passado, como é o caso do código acima. Só estou falando desse exemplo pra você ver como alocação dinâmica pode ser usada pros mais diversos e esquisitos casos, depende do problema e também da lógica do programador. Esse conselho serve para programadores não experientes ou descuidados em relação a erros comuns que podem ocorrer com vetores (como ultrapassar os limites). Também é bom usar os templates da STL porque eles foram exaustivamente testados pelos desenvolvedores, sendo assim mais confiáveis. Aqui o correto seria usar colchetes em vez de parênteses. Cuidado. O operador new retorna um ponteiro para um inteiro, o lvalue em questão é um inteiro, deveria ser um ponteiro para inteiro. Repito, se sua intenção for alocar vários elementos contínuos, um vetor, use colchetes e não parenteses. Os parênteses são usados para inicialização, então: int *inteiro = new int(4); Alocaria um inteiro no heap, inicializaria a posição de memória referente ao inteiro como o valor 4. Aqui sim está certo, mas.... ...isso que você afirmou está errado, o lvalue é um inteiro, deveria ser um ponteiro pra inteiro. Cuidado! O que se diz é que o nome do vetor é um ponteiro constante para o primeiro elemento do vetor. EDIT: Esqueci de mencionar uma outra coisa: o c++ fornece dois métodos pra verificar se a alocação foi bem sucedida: Primeiro: se new falhar, lança uma exceção bad_alloc que se não for capturada e manipulada, terminará o programa imediatamente. Segundo: o segundo método pode ser atingido utilizando-se de um objeto especial definido no header <new> e o fornecendo para new como abaixo: int *vetor = new (nothrow) int[5]; if(!vetor){ cerr << "Erro ao alocar memória" << endl; // ou qualquer outra atitude } Sendo assim, em vez de laçar a exceção, new retorna um ponteiro NULL, como ocorria no C, com a maioria das funções funções. Espero que tenha lhe ajudado, Abraços.
×
×
  • Criar Novo...