-
Total de itens
884 -
Registro em
-
Última visita
Tudo que vangodp postou
-
Pode se criar um array de structs. struct Banda{ char nome[30]; char tipo[20]; int quant_int; int posicao; }; int main(){ struct Banda lista[5]; logo para modificar a posição da banda 2º banda por exemplo é: lista[1].posicao = 1; ... e para ler um string gets( lista[1].nome);
- 3 respostas
-
5 bandas em uma estrutura é algo como isso: struct Banda{ char nome[30]; char tipo[20]; int quant_int; int posicao; }; struct lista{ struct Banda b0; struct Banda b1; struct Banda b2; struct Banda b3; struct Banda b4; } logo para modificar a posição da banda 2º banda por exemplo é: lista.b1.posicao = 1; ... e para ler um string gets(lista.b1.nome);
- 3 respostas
-
O procedimento é o mesmo que em c++, porem não se deve dizer referencia pois uma referencia em C++ é quando fazemos void foo ( int &x ){...}. Na hora de efetuar o passo por referencia em C++, nós invocamos a função foo(como a do exemplo anterior) e passamos normalmente tal como se de um passo por valor se tratase foo(valor);, é mais ou menos como uma referencia em C com umas quantas diferenças, tratase de uma "item" que aponta uma variavel, porem a diferença reside que int &x não pode ser usado para apontar outro valor diferente ao valor que foi designado na atribuição, por isso chamo de item e não de variavel, si eu quero usar uma referencia em C++ devo indicar o valor justo na declaração. Imaginamos que tenho int n = 10, e quero uma referencia a n, então faço int &ref=n;, note que não preciso por & adiante como fazemos com ponteiros, assumimos que &ref já espera uma direção de memoria, por isso não preciso por & adiante de n. Outra diferença é que em nenhum momento posso "reutilizar" ref como um ponteiro, tentando faze-la apontar a outra variável, tipo ref=outraVariavel, ref tem que ganhar o valor como disse anteriormente na hora declaração, digamos que ela se "conecta" com a variável que recebeu por atribuição na hora da declaração, então em C++ referencias são quando você precisa passar a direção porem a variável que a recebe não pode apontar outra coisa, e ponteiro você sim pode voltar a reutilizar, referencias em C++ tem um comportamento semelhante a um const int*, você deve dar o valor justo na hora de declarar, e depois já não pode mudar esse valor. Referencias em C++ se costumam usar internamente dentro de uma mesma classe pois é mais comodo que o uso de ponteiros, quando uma variável tem que ser intercambiada entre 2 classes então se costuma usar ponteiros que são mais flexíveis.
-
float const PI = 3.1415926536; ... printf ( "O angulo A e: %lf radianos\n", ANGULO * ( 180 / PI ) ); Isso?
-
#include <stdio.h> #include <stdlib.h> struct agenda { char horario[10]; char data[10]; char compromisso[50]; }; int main () { struct agenda *ptr; int i, tam = 2; ptr = ( struct agenda* ) malloc ( sizeof ( struct agenda* ) *tam ); for ( i = 0; i < tam; i++ ) { printf ( "\n Digite o horario do compromisso no formato HH:MM:SS: " ); gets ( ptr[i].horario ); fflush ( stdin ); printf ( "\n Digite a data do compromisso no formato DD/MM/YYYY: " ); gets ( ptr[i].data ); fflush ( stdin ); printf ( "\n Digite qual o compromisso: " ); gets ( ptr[i].compromisso ); fflush ( stdin ); } printf ( "\n ----------------------------" ); for ( i = 0; i < tam; i++ ) { printf ( "\n Compromisso %d", i + 1 ); printf ( "\n" ); printf ( "\n Horario: %s", ptr[i].horario ); fflush ( stdin ); printf ( "\n Data: %s", ptr[i].data ); fflush ( stdin ); printf ( "\n Compromisso: %s", ptr[i].compromisso ); fflush ( stdin ); printf ( "\n ----------------------------" ); } free(ptr); return 0; } Volte a ler tudo o que eu escrevi e analise seu código. Se eu te explicar o erro que você tem e você não prestar atenção ou achar que falo tonterias fica difícil chegar a uma compreensão do problema. você precisa primeiro acessar ao objeto ptr[X] e depois acessar suas variáveis membros, tanto na leitura como na escritura. Sorte
-
quando você declara ptr = (struct agenda*) malloc(sizeof(struct agenda*)*tam); imagine que tam vale 3, nesse caso seria igual a ptr = (struct agenda*) malloc(sizeof(struct agenda*)*3), isso é um array de structs, sizeof(struct agenda*)*3 diz que você está usando malloc para reservar 3 espaços do tamanho da estrutura agenda, isso quer dizer que você tem 3 agendas e não uma como você ta tentando ler com o comando gets(ptr.horario), você precisa ter claro que você tem ptr[0] que é agenda 1, ptr[1] que é agenda 2 e prt[3] que é agenda 3, são 3 agendas e cada uma delas tem 3 strings(Não chars) dentro, e você pode ler com gets(ptr[0].horario), nesse caso você leu o horario da primeira agenda, mas tem 2 mais no nosso hipotético caso, ou seja que podemos ler a hora para ptr[1].horario e ptr[2].horario, também podemos ler data e compromiso para cada uma das 3 agendas. Então você precisa primeiro indicar qual das agendas que você quer editar(ptr[0], ptr[1], ptr[2]...) e depois por um ponto e seguido do ponto a variável que você quer editar, se queremos editar a primeira agenda eu selecionamos ptr[0] + a .variável, isso fica ptr[0].variavel. Esse é o erro que você está tendo(tratar um array de structs como se fosse um único struct), se quiser uma só estrutura então use ptr = (struct agenda*) malloc(sizeof(struct agenda*)).
-
main.c //main.c #include <iostream> using namespace std; #include "Calc.h" int main(){ Calc calc; calc.run(); // <-tudo ja está aqui! Não precisamos nada mais que essa funçao. return 0; } Calc.h #ifndef CALC_H #define CALC_H class Calc { public: Calc(){} ~Calc(){} void run(); int menu(); // posiveis operacoes de uma calculadora void soma(){ cout << "Fazer aqui operaçoes de soma" << endl; } void subtrair(){ cout << "Fazer aqui operaçoes de subtracao" << endl; } private: }; #endif // CALC_H Clac.cpp #include <iostream> using namespace std; #include "Calc.h" int Calc::menu() { cout<< "Escolha uma opcao. " << endl << "1) Somar. " << endl << "2) Subtrair." << endl << "0) Sair. " << endl; int op; cin >> op; cin.sync(); //evita erros com buffer e strings ou chars return op; //<- essa é o valor que o switch vai tomar } void Calc::run() { bool sair = false; while ( !sair ) { //Por enquanto NAO saimos.... switch ( menu() ) { // menu retorna um int lembra? XD case 1: soma(); break; case 2: subtrair(); case 0: sair = true; cout << "Obrigado por usar softNoobs INC >_<." << endl; break; default: cout << "Operacao inexistente" << endl; } } } você precisa fazer tudo dentro da mesma classe em teoria você só precisa arrancar uma só função membro, e se essa função você chama-la dentro do construtor não precisa nem isso. Tenha claro que uma função não é mais que um conjunto de variáveis e funções que tem como objetivo resolver um problema comum, más não passa de um punhado de variáveis e funções. O objetivo de uma classe é "ofuscar" as variáveis para que não possam ser vistas por funções que estejam fora dessa mesma classe, en teoria si podemos chamar uma variável membro de uma classe desde fora sem ser através de uma função membro desta mesma classe estamos fazendo mal, pois tudo o que estamos fazendo é trabalho dobrado, pois essa variável não diferi muito de uma variável global, mas para isso existem já as variáveis globais, não é preciso usar todo esse mecanismo para isso XD. Com tudo isso o que eu quero deixar claro é que dentro de uma mesma classe você tem variáveis e funções membros, todas elas são visíveis umas a outras, e isso é o que quero demostrar nesse meu exemplo, analise o código, é bem simples, si quiser discutir sobre isso pode me add por skype o aqui mesmo pelo forum. Com seu exemplo de uma calculadora não fica demostrado a utilidade que tem as classes, isso não quer dizer que não seja util, o que quero dizer é que talvez com esse exemplo você não seja capaz de ver a necessidade de uma classe. Sorte.
-
você pode fazer isso também la no toolchain do codeblocks, isso ativa o conio em todos os programas, incluido os que não estão contidos em um projeto, mas não recomendo fazer isso pois si em algum projeto não quiser o conio você vai ter que tragar ele >_<. Outra opçao é você fazer un clonado da configuração do mingw e nessa por o conio2 e assim você vai trocando de configuração. Recomendo fazer um guardado da pasta codeblocks que ta dentro da pasta %appdata%, se acontecer algo assim você não precisa desinstalar o codeblocks, si algo formal você pode eliminar esa pasta e codeblocks gera outra com o programa por default, e você pode pegar a que você salvou antes e tudo esta igual que antes.
- 3 respostas
-
- code::blocks
- error reading from stream
- (e %d mais)
-
Vou lhe deixar meu conio2 e as instruções para instalar ele no codeblocks, e tambem depois criar um template para sempre ter ele configurado. 1º Crie um projeto de aplicação de Console ->menu Flie/New/Project e escolha console application. -escolha C ou Cpp e configure normalmente o projeto. 2º Agora no menu Project escolha Properties-> Project/Properties -Agora escolha a opção abaixo(Project's Build options...). 3º Selecione a aba Linker settings, no quadro Link libraries pulse Add e adicione o arquivo libconio.a que esta na pasta chamada lib dentro da pasta conio2, nesse exemplo eu tenho a pasta conio no disco local C que é mais facil para encontrar ela, eu peguei a pasta conio2 no disco C, e dentro tem varias outras pastas, as mais importantes são a lib que contem o arquivo libconio.a e a pasta include onde contem os arquivos conio2.h e outros. Em Other linker options ponha -lconio, muito importante esse passo pois isso vai linkar seu programa a conio. 4º Agora selecione a aba Search directories e mais abaixo na aba compiler vamos indicar pulsando Add, onde esta a pasta include, si perguntar sobre rota relativa escolha não ou sim, eu escolhi não. 5º Agora continuando dentro de Search directories escolhemos a aba Linker, igualmente que o passo anterior indicaremos a pasta lib que esta dentro da pasta conio2 no disco C onde deixamos ela conforme podemos ver na imagem. Por ultimo pulse ok e faça a prova a ver si está funcionando, use o seguinte código. E não se esqueça de fazer o include de conio2.h: Se tudo funcionou corretamente, agora criamos uma template para não ter que ficar configurando isso todo o tempo. Vamos ao menu File e escolhemos a opção "Save project as template"... Escolhemos um nome apropriado... Agora cada vez que for criar um projeto, podemos escolher "user templates" nessa lista da esquerda, e na lista do centro está conio2 que guardamos como modelo(template), é só escolher ele e o programa vai perguntar onde você quer salvar o projeto que é idéntico ao que você criou antes. Espero ter ajudado.
- 3 respostas
-
- code::blocks
- error reading from stream
- (e %d mais)
-
use long long int en vez de int
-
Como assim? Se o vetor começa no 0 e termina no 99 não pode buscar no 100, quando for 100 tem que sair na marra. Não te entendo.
-
Qual tipo de estrutura seria utilizado? Pilha? Fila? Nem um nem o outro, o que você precisa é de uma lista, agora sobre sua pergunta não entendo uma coisa. É dinâmica ou tem um tamanho fixo? Se for fixo você bem pode usar um vetor de structs, si não talvez o que você precise é de Listas simplesmente encadeadas
-
#include <stdio.h> #include <time.h> #include <stdlib.h> int main (){ srand(time(NULL)); // simplesmente ponha isso aqui, nao repetir en outras funçoes int i, n, sair = 0; int lista[100]={0}; //lista de numeros aleatorios printf("start\n\n"); for ( i = 0 ; i < 100 ; i++ ){ int aux = 0 + rand() % ( 1000 - 0 ); //numeros aleatorios de 0 a 1000 lista[i] = aux; printf("Gerado: %d\n", lista[i]); } printf("\nDigite um numero para buscar na lista: "); scanf("%d", &n); i = 0; do { if( lista[i] == n ){ printf("O numero %d se encontra na lista\n\n", lista[i]); sair = 1; } i++; if ( i == 100){ printf("O numero nao esta contido na lista\n\n"); } }while( !sair && i < 100 ); getchar(); return 0; }//MAIN estude o código e se tiver duvidas pergunte
-
isso se resolve com un scanf dentro de um laço for que faça a leitura de un numero, dai você declara uma variável que vai conter o maior numero, essa começa valendo zero, você lê um numero e a cada leitura compara ambos(num < maior), se o ultimo numero tomado por teclado for maior então você guarda esse numero na que guarda o maior valor.
-
quando você passou por char *loc = strstr(s1,s2); loc ficou apontando justo a posição onde começa rum, si não me engano na posição 33, se você fizer um printf de loc, você vai ver que vai imprimir justo "rum do rei da Rússia" ou seja, loc aponta a 33ª letra de char p[] = "O rato roeu a rolha da garrafa de rum do rei da Rússia" que é justo onde começa "rum", dai você ta confundindo não sei que na parte strcpy(loc,loc+strlen(s2));, mas concretamente na parte loc+strlen(s2). Se você tiver bem claro que é um string você saberá que um string é um conjunto de letras(chars) armazenado na memoria de forma consecutiva, todos e cada um desses chars tem um tamanho de 1 byte, e o tamanho total de p é a soma de todas as letras +1 que é o carácter nulo que marca o fim do string, dai que strstr retornou a 33ª letra onde se encontra a primeira letra da palavra "rum" então digamos que p[0] é o byte zero, e p[33] é o byte 33 justo onde esta a letra 'r', a seguinte letra é a 34 que é a letra 'u', e por ultimo a 35ª letra é 'm', somando 'r'+'u'+'m' = "rum", rum mede 3 bytes pois tem 3 letras, isso é o que retorna strlen(s2), que é a mesma coisa que strlen("rum"). Então loc+strlen(s2) é como dizer, some a loc que aponta a 33ª posição mais 3 bytes, então agora loc aponta logo depois de rum, e isso é o que se copia a posição 33. To fazendo isso meio de cabeça, más o efeito que tem strcpy(loc,loc+strlen(s2)); é pegar na frase: "O rato roeu a rolha da garrafa de rum do rei da Rússia0" copiar loc que aponta a 33ª ou 34ª posição, ou seja: "rum do rei da Rússia0" avançar o ponteiro 3 posições ficando: "do rei da Rússia0" e copiar isso na 33ª posição "comendo" assim a palavra "rum", isso é o que ta acontecendo. Isso tudo é tema de ponteiros, se não entendeu ponteiros não continue avançando, volte a estudar ponteiros até ficar bem afiado, si não tudo vai custar muito mais trabalho daqui em diante.
-
#include <stdio.h> int main () { char oChar; printf ( "Char = " ); scanf ( "%c%*c", &oChar ); printf ( "Resultado: %c, en ASCII: %d\n\n", oChar, oChar ); printf ( "Seguinte:\n" ); printf ( "Resultado: %c, en ASCII: %d\n\n", oChar + 1, oChar + 1 ); printf ( "segundo seguinte: \n" ); printf ( "Resultado: %c, en ASCII: %d\n\n", oChar + 2, oChar + 2 ); getchar(); return 0; }
-
se na hora de declarar o vetor fizer algo como int vetor[30] = {0}; todo o vetor inicializa em zeros =).
-
para isso teria que ler como um string e fazer as comprovações necessitarias, é algo complexo pois teria que passar de string a int, float, etc e comprovar si tem ponto('.'), chars etc, assegurar que o valor não supera o de um int....
-
ver si entendemos... a menos que numeroDecimal fosse um float, double ou sei lá que outra coisa poderia ser, o que você anda buscando acho que é algo como: int isaint(double a){ int b; if (a % 2) { b = 0; }else{ b = 1; } return b; } Ou explique melhor a ver se podemos ajudar.
-
O que á de errado com o trecho do... while?
pergunta respondeu ao PerguntasScript de vangodp em Grupo de Estudos
Não tenho tempo de provar mas troque essa linha: por scanf("%c%*c", &opcao); E essa outra linha: por isso scanf("%d%*c" ,&numDecimal); Depois me diga se solucionou o problema, se sim o problema era ao pulsar enter... lixo no buffer: http://forum.imasters.com.br/topic/336835-tutorial-systempause-e-fflushstdin/ -
você tem problemas com o buffer... eu já to cansado de escrever mil linhas explicando isso todo o tempo, todos temos problemas com o buffer, recomendo você ler este tema aqui abaixo, leia e acompanhe a duvida de cada usuário, ao terminar de ler esse tópico você vai entender o porque falha seu programa, não ler esse tópico será sua ruína como programador, esse problema sempre existirá e você nunca vai saber o por quê. http://forum.imasters.com.br/topic/336835-tutorial-systempause-e-fflushstdin/ Se tiver duvidas pode perguntar aqui mesmo, mas leia e preste atenção em todo o conteúdo. Acho que alguém deveria postar um tópico desses aqui neste fórum, é sem duvida a maior fonte de duvidas dos programadores iniciantes. Sorte
-
malloc e realloc retornam um ponteiro a void*, isso quer dizer que se nós buscamos lá onde estiverem declaradas essas duas funções vamos ver que elas estão declaradas como void* malloc(....){..., o mesmo acontece com realloc, void* malloc(....){... . Um ponteiro a void(void*) é um ponteiro genérico, ou seja, essas funções nunca sabem que tipo de ponteiro devem retornar pois são muitos tipos diferentes, então a solução é que ela devolve um ponteiro generico void* ao que posteriormente devemos castear(converter) ao tipo que em questão, o nosso tipo, nesse caso int*, muitas pessoas usam (int), isso esta errado, é (int*) pois se deve converter de void* que é um ponteiro a void a outro ponteiro que é int*(mesmo do tipo da sua variável), isso só funciona porque int e int* ocupam o mesmo espaço, mas é errado. Então prove substituir as seguintes linhas por suas versões corretas: substituir :int *v = malloc ( 2 * sizeof ( int ) ); por int *v = (int*)malloc ( 2 * sizeof ( int ) ); e substituir temp = realloc ( v, ( i + 1 ) * sizeof ( int ) ); por temp = (int*)realloc ( v, ( i + 1 ) * sizeof ( int ) ); Com isso seu programa deveria funcionar, me funcionou corretamente ou isso acho. >_<
-
Legal... se seu programa funciona tal como você quer felicidades, agora você pode tentar otimizar ele, esse montao de ifs, talvez você possa mudar isso por um loop for ou while, deixando ele bem mais pequeno.
- 3 respostas
-
- maquinas de snacks
- snacks
-
(e %d mais)
Tags:
-
#include <stdio.h> #include <stdlib.h> #include <string.h> //strcpy #define QUANTIDADE_INICIAL 20 #define MAX_PRODUTOS 100 struct Produto { char nome[100]; int quantidade; float valor; int vendido; }; int main () { int produtosEmVenda = 3; // quantidade de produtos em venda atualmente ao inicio do programa int i; struct Produto produto[100] = { //Inicializaçao na hora da declaraçao. {"salgadinho", QUANTIDADE_INICIAL, 1.0 , 0}, //Produto 0. Começamos a contar de 0 em C/C++, é o primeiro ;) {"pirulito" , QUANTIDADE_INICIAL, 0.50, 0}, //Produto 1. }; //Inicializaçao posterior a hora da declaraçao strcpy ( produto[2].nome, "Chocolate" ); produto[2].quantidade = QUANTIDADE_INICIAL; produto[2].valor = 1.50; produto[2].vendido = 0; //para mostrar os produtos vc faz: for( i=0; i<produtosEmVenda && i<MAX_PRODUTOS; i++ ){ printf("Produto(%d): %s Valor: %2.2f\n", i+1, produto[i].nome, produto[i].valor); //i+1 para que seja produto 1 ao informar, e nao produto 0 } // se quiser registrar um novo produto 1º incremente produtosEmVenda em 1 e logo registre o novo produto produtosEmVenda++; //Agora registramos os dados do 4º produto, porem é o produto 3 si contamos de zero. strcpy ( produto[3].nome, "pipoquinha" ); produto[3].quantidade = QUANTIDADE_INICIAL; produto[3].valor = 1000.00; // um roubo descarado =D produto[3].vendido = 0; //mostramos novamente o produto printf("\nNovos produtos\n"); for( i=0; i<produtosEmVenda && i<MAX_PRODUTOS; i++ ){ printf("Produto(%d): %s Valor: %2.2f\n", i+1, produto[i].nome, produto[i].valor); //i+1 para que seja produto 1 ao informar, e nao produto 0 } getchar(); return 0; } É só uma idéia. Um string é declarado dessa forma: char palavra[100]; // máximo 100 letras para essa palavra. Para escrever nesse char você precisa usar algo como: scanf("%s%*c", palavra); para imprimir: printf("%s", palavra); para copiar um ao outro você pode usar: strcpy(palavra, outraPalavra); Outra palavra é também um string... ou você pode usar literais strcpy(palavra, "Ola mundo!"); Um string pode ser inicializado com um valor literal na hora de sua declaração, isso evita ter que usar strcpy depois, pois posteriormente você precisa modificar cada uma das casinhas manualmente, strcpy faz isso por vc, mas cuidado, certifique-se que em palavra tem suficiente tamanho para receber outraPalavra. char outraPalavra[100] = "Ola Mundo!"; char palavra[100]; strcpy(palavra, outraPalavra); Para usar strcpy e outras funções para manipulação de strings(strcmp etc) você necessita da biblioteca string.h. Enfim, de uma olhada e se não entender pergunte. Recomendo você usar estruturas tal como no exemplo que lhe passei, pois será muito mais fácil se todos os dados de um produto estiverem todos agrupados em uma struct.
- 3 respostas
-
- maquinas de snacks
- snacks
-
(e %d mais)
Tags: