-
Total de itens
884 -
Registro em
-
Última visita
Tudo que vangodp postou
-
sinto muito... até C++ chego mas C# está fora dos meus conhecimentos.
-
sim exato! O ponteiro está na pilha da função, ele guarda a direção de memória onde foi reservado o espaço dinamicamente. Em outras palavras C é um linguagem "amigável" porem "agressivo", amigável porque permite você dar apelidos para espaços de memória que se encontram na pilha da função para não ter que estar "recordando" a direção da memória. É bem mais fácil você lembrar o nome de uma pessoa que seu numero de inscrição no registro de nascimento não é? Porem o linguagem também é agressivo porque realmente estamos lidando com a memória física do computador, no heap não podemos dar nomes a variáveis, teríamos que recordar sim ou sim o numero da direção de memória, mas como C nos brinda o mecanismo de ponteiros que nada mais são que variáveis que guardam a direção de outras variáveis, por esse motivo ainda assim não precisamos lembrar da direção de certa variável alocada no heap, acessamos desde o ponteiro. Toda variável alocada no heap tem que ser apontada por um ponteiro porque não podemos dar nomes para elas, só podemos dar nomes para as que estão na stack(pilha) das funções ou as globais que são um tipo de caso especial, digamos que as globais são declaradas em um espaço especial da memória.
-
Isso não é C. Será C# não é?
-
#include <stdlib.h> #include <stdio.h> //#include <sys/types.h> #include <dirent.h> void error ( const char *s ); int main() { DIR *dir; struct dirent *ent; dir = opendir ( "." ); if ( dir == NULL ) error ( "não posso abrir a pasta" ); while ( ( ent = readdir ( dir ) ) != NULL ) { /* Vai retornar a pasta atual (.) e a anterior (..), como nas ls */ if ( ( strcmp ( ent->d_name, "." ) != ) && ( strcmp ( ent->d_name, ".." ) != ) ) { printf("%s\n", ent->d_name ); } } closedir ( dir ); return EXIT_SUCCESS; } A struct ent(que é um ponteiro) possui uma variável interna que trata-se nada mais nada menos que o nome de cada arquivo que foi lido um por um,, se souber processar esse string é só comparar com o nome do arquivo e vuelá. O que você vai ver é a lista de todos os arquivos que estão na mesma pasta, imagina que você tem algo como: "contabilidade 19 05 16.txt" ... é só usar sscanf com seus devidos especificadores para "crivar" esa string e tranformarla em algo como: struct { char nome[100] int dia; int mes; int ano; char tipo[10]; //txt }Dados; ...Dai é só pegar todos os arquivos que saírem com o nome Dados.nome e se bater com "contabilidade" é só comparar dia, mes e ano para obter seu arquivo desejado. Claro que requer um pouco de trabalho, mas é relativamente fácil faze-lo. Espero que sirva de ajuda... Sorte!
-
[ERRO] Compilar com CMD + g++ + c++
pergunta respondeu ao MichaelKeller01 de vangodp em Grupo de Estudos
Nessa pagina explica como fazer: http://lazyfoo.net/tutorials/SDL/01_hello_SDL/windows/mingw/index.php O comando seria parecido a: g++ 01_hello_SDL.cpp -IC:\mingw_dev_lib\include\SDL2 -LC:\mingw_dev_lib\lib -w -Wl,-subsystem,windows -lmingw32 -lSDL2main -lSDL2 -o 01_hello_SDL acho que é problema de linkado o que você está recebendo, não sei que tutorial você está seguindo mas nessa pagina está a explicação de como por a biblioteca em funcionamento. Espero que sirva de algo. -
Um arquivo pode ser de muitas formas.... binários, de texto, seqüenciais, aleatórios, etc. Podem conter letras, números, frases.... lhe recomendo subir o conteúdo de ambos arquivos o ao menos para poder te indicar a forma correta para faze-lo.
-
não!
-
Por que a função "isdigit" está funcionando sem a inclusão da sua bilbioteca?
pergunta respondeu ao Ricardo HDA de vangodp em C, C++
Que IDE/compilador você usa? Codeblocks costuma fazer a inclusão automática de algumas bibliotecas caso forem reconhecidas como faltantes.... em todo caso, se isso chegasse a acontecer você teria uma nota("note") que poderia ser visto na área de logs conjuntamente onde saem os erros de compilação. -
vetores são um conjunto de variáveis alojadas em memória de forma consecutiva, ou seja, uma detrás de outra, e todas do mesmo tipo, na qual a primeira variável desse grupo é apontada por um ponteiro. você entenderá melhor quando chegue ao tema de ponteiros e aritmética de ponteiros.
-
fflush não foi concebido para trabalhar com o buffer de entrada(stdin), utilizarr fflush conjuntamente com strings é um erro ainda pior, ele foi criado para trabalhar com caracteres somente e com a saída(stdout), o fato que funcione é pura sorte, porem os seus mesmos criadores já advertiram que é uma "loteria" utiliza-lo conjuntamente nos dois casos citados anteriormente, sinceramente eu acho que é uma gambiarra. Todo programador deveria manter a distancia, desde o inicio de certos hábitos que de usar muito tempo podem causar uma forma de programar errônea, é como aprender musica com posturas erradas ou criando más costumes, depois fica difícil se desprender desses maus hábitos. O função membro sync da classe cin permite "sincronizar" o buffer de entrada com o que você escreveu no teclado, eliminando esses caracteres incômodos como o \n que faz o programa saltar leituras, essa função faz parte do padrão, a dia de hoje não conheço nada melhor em C++. Claro que não é a única forma, pois existem outras soluções para isso... a única forma que existe para eliminar algo do buffer de entrada é fazendo a leitura tal como mencionou Felipe222 com o getchar, para você fazer uma idéia, essa função que vou postar a continuação é milagrosa, pode servir muito melhor que fflush, e é 100% portável: void flush() { int ch; while ( ( ch = fgetc ( stdin ) ) != EOF && ch != '\n' ) {} }
-
E não pode por o que leva feito?
-
cin.sync(); depois de ler strings e chars cin>>palavra; cin.sync();
-
Em C é recomendado cria-las ao começo das funções. Em C++ você pode criar elas em qualquer ponto do seu programa, sempre que seja antes de usa-la claro. Porem somente tome cuidado ao declara-las entre { e }, nesse caso somente teria validez entre as chaves.
-
Isso aqui é um sub fórum de C/C++/C#, você precisa se dirigir ao sub fórum correspondente. Procure no google sobre "java applet". exemplo
-
Isso é normal, lembre que se escolher alterar o elemento 1 esse será a primeira posição pois a primeira é 0 e a segunda é 1. Se quando chegar no scanf e você colocar a 1 querendo dizer que isso é a primeira posição do seu vetor, você deveria ter algo como scanf("%d", &posicao);, então você entra com o numero 1 nesse scanf, a posição a alterar seria vetor[posiçao-1], isso equivale a vetor[0], si posição vale 1 e restamos 1, isso é zero. Mas tem outro problema.... Si a pessoa entrar com 0? você acessaria a posição -1, isso é errado, não se pode acessar a posições mais baixas que zero nem maiores que o limite, isso deveria ser conferido antes. do{ scanf("%d", &posicao); posicao--; }while(posiçao>=0 && posiçao < TAM );
-
Qual é sua duvida?
-
Pode ser friend class (classes amigas). #include <iostream> using namespace std; class Operation{ private: float fResult; float fResultModule; float pX; float pY; public: //... //... friend class Output;//<- Classes Amigas... agora tenho acesso completo da parte privada de Operation desde Output }; class Output{ public: void OpPrint( Operation &obj ); }; void Output::OpPrint( Operation &obj ){ cout << "endlA soma do valor " << obj.pX << " entre " << obj.pY << " e: " << obj.fResult; } int main (){ Operation op; //op não é amiga de out, si não o contrario. Output out; //out é amiga de op out.OpPrint(op); // Usando casse amiga cin.ignore(); return ; }
-
#include<stdio.h> #include <stdlib.h> #define TAM 3 void Set_Elemento(int *vetor){ // Funçao que espera um ponteiro, esse ponteiro indicará onde começa o vetor la na free storage int i,x; printf("\n \n Escolha um numero ! = \n"); scanf("%d",&x); do{ printf("\n escolha a posicao do vetor para trocar o numero ! \n"); scanf("%d",&i); }while( i< || i>TAM ); vetor[i] = x; } //programa principal int main(){ int *vetor=(int*)malloc(sizeof(int)*TAM); // vetor é um ponteiro recorde isso, o espaço está na free storage e não dentro da pilha de main int i; //preenchendo o vetor . . . for(i=;i<TAM;i++){ printf("Preencha o vetor[%d] :", i); scanf("%d", &vetor[i]); } // mostrando o vetor . . . for(i=;i<TAM;i++){ printf("\n Vetor[%d] = %d", i, vetor[i]); } Set_Elemento(vetor); // Aqui passo um ponteiro, não preciso por o & adiante por que vetor já é um ponteiro, ele armazena uma direção, que é exatamente o que a funçao ta esperando. for(i=;i<TAM;i++){ printf("Vetor[%d] = %d \n",i ,vetor[i]); } free(vetor); return ; } Bem... um ponto em destacar é que um vetor simples somente tem o escopo(visibilidade) dentro de main, se você passar ele você estará passando uma "cópia", isso faz com que o vetor que se modifique em outras funções não seja o original que está em main, si não a copia que recebeu, ao voltar a main o vetor estará igual, ou seja não sofreu alterações. Esse problema tem uma solução... se usamos malloc para reserva de memória seu escopo será em todo o programa(em todas as funções), você somente passa o ponteiro, e lá onde o vetor for, se ele for modificado em qualquer função, ele será modificado dentro de main, na realidade ele está em uma parte especial da memoria chamada "free storage", eu somente indico para as funções que quero que se modifique o mesmo vetor que esta na free storage quando passo o ponteiro, e não uma copia que do vetor quando passo por valor para a função.
-
não sei o que aconteceu que o quantia[0] saiu quantia[] sem o índice =/
-
se você pretende escolher a posição do vetor com scanf("%d",i); saiba que está errado. Não seria scanf("%d",&i)?
-
é a de coletar uma string, ou seja array de chars, você ta pasando para ela um array de inteiros. Para solucionar seu problema faça algo como: #include <stdio.h> #include <stdlib.h> #define MAX 3 int main ( void ) { int quantia[MAX]; printf ( "Quantia? R$ " ); scanf("%d %d %d", &quantia[], &quantia[1], &quantia[2] ); printf ( "%d", quantia[] ); getchar(); return ; } Digite 3 valores separados por espaços e aperte o enter, depois disso o único que se imprimirá é o primeiro deles.
-
Sistema de Páginas/Negrito em parte selecionada do texto(VISUAL BASIC)
pergunta respondeu ao Guilherme_Mesquita de vangodp em C, C++
Isso é uma fórum para C/C++, você obteria ajuda mais rápido se postar no fórum referente a seu linguagem- 2 respostas
-
- word
- sistema de página
- (e %d mais)
-
não será na linha 31?: if(delta > )
-
bom...tanto C como C++ não dispõem de bibliotecas para a implementação de interfaces gráficas de forma padrão, mas por sorte ambos linguagens são altamente extensíveis pelo qual você pode usar uma biblioteca de algum terceiro, até mesmo os próprios sistemas operativos provêem um conjunto de ferramentas chamadas API para que através não só de C/C++ si não de vários outros linguagens de programação a comunicação com o sistema, isso inclui interfaces gráficas entre muitas outras coisas, no Windows por exemplo isso se chama WinAPI. Usar a API não é a única forma, você pode usar alguma biblioteca que faça uso da API por vc, elas costumam ser bem mais amigáveis e inclusive são mais portáveis entre sistemas operativos, por exemplo, se você quer fazer um programa com interface gráfica para Windows, saiba que você precisa usar a API do Windows, depois se quiser fazer esse mesmo programa para Linux você terá que usar a API do Linux, resumindo você terá que aprender a usar 2 APIs, porem existem bibliotecas que fazem o uso das apis por vc, si você quer criar um botão por exemplo, você faria algo como crearBotão(janela,x,y), e essa função dependendo do sistema operativo que estiver se encarrega de chamar a API especifica para esse sistema. Então para criar o que você quer saiba que ou você usa a API ou você usa alguma biblioteca mais amigável como QT, WXWidgets etc, por colocar alguns exemplos,existem muitas delas, escreva no google, "interfaces gráficas Windows C++" no google e seguro você acha algumas delas.
-
Ultimamente as interfaces são mais feitas em C++.