Ir para conteúdo
Fórum Script Brasil

vangodp

Membros
  • Total de itens

    883
  • Registro em

  • Última visita

Tudo que vangodp postou

  1. Um dado a ter em conta é que o arquivo precisa existir antes de abrir o programa pois o parametro 'a' do fopen quer dizer "modo inserção", ele não cria um arquivo, simplesmente atualiza um já existente.
  2. você ta usando a função errada e o modo de abertura errada. Acredito que o que você quer é um arquivo de texto plano. #include <stdio.h> #include <stdlib.h> FILE*arquivo; char nome[1024]; void pedirnome() { printf("Digite seu nome:\n"); gets(nome); } int main(){ arquivo = fopen("arquivo.txt", "a"); //Comprovando se o arquivo abriu. Caso contrario, é dizer, não abrir, saimos. if( arquivo == NULL ){ perror("Erro"); getchar();//pausa exit(1); } pedirnome(); //fwrite(nome, 1, strlen(nome), arquivo); fprintf(arquivo,"%s\n", nome); //Guardar. Observação: O ARQUIVO DEVE EXISTIR pois o atributo 'a' de append somente acrecenta dados em um arquivo já existente. fclose(arquivo); printf("\nSalvo com sucesso."); return 0; } Essa seria a forma correta.
  3. vangodp

    Como resolver??

    Ta passando deveres aqui pra galera?
  4. #include <stdio.h> #include <stdlib.h> #include <stdbool.h> //Usar boleanos(true e false) #include <limits.h> //UINT_MAX int main() { unsigned int n; unsigned int maior = 0; unsigned int menor = UINT_MAX; bool sair = false; printf ( "%u e %u\n\n", maior, menor ); //Imprimimos só para ver o que há while ( !sair ) { //Por enquanto não sair... printf ( "\nInsira um valor: " ); scanf ( "%u", &n ); if ( n == 0 ) { sair = true; continue; } //Si foi zero queremos sair, voltamos para o while e obviamente sairemos do programa //si não foi zero if ( n > maior ) { maior = n; } if ( n < menor ) { menor = n; } printf ( "%u e %u\n", maior, menor ); } return 0; } Se tiver duvidas pergunte
  5. Vou comentar os pontos que vejo que estão errados. Nos scanfs não leva & na hora de ler as strings nem os ponteiros, tire o & de todos os scanfs que forem ler strings ou ponteiros. Como não conheço ninguém que entre ponteiros por teclado por agora basta você lembrar que strings não levam & na hora de ler, só os int, float, char etc levam o & adiante no scanf. Certamente seu programa também está dando problema na hora de ler strings, isso é devido a causa de ter lixo no buffer. Procure um bom tutorial de "como limpar o buffer do teclado em C". Seja o que for não use fflush junto com stdin como se indica em muitos lugares, se ver fflush(stdin) onde entrar nem precisa ler, saia fora e busque outra pagina. fflush+ stdin aparentemente funcionam mas tem varios problemas, Recomendaria você ler alguns posts: https://forum.imasters.com.br/topic/336835-tutorial-systempause-e-fflushstdin/ https://forum.scriptbrasil.com.br/profile/112983-vangodp/?status=3184&type=status https://www.clubedohardware.com.br/forums/topic/1186013-c-atribuição-de-strings-a-partir-de-uma-entrada/?tab=comments#comment-6522965 char funcional[1]; só tem 1 char? >_<
  6. Uma boa forma é usando Autômato finito determinístico e usar a sintaxes que se pode observar aqui: "Syntaxe de um email". Em Autômato finito determinístico serve, entre muitas coisas, para validar uma string e saber se ela idêntica a outra que temos. Por sorte tenho um exemplo. Imaginamos umas quantas palavras ou frases(neste exemplo somente veremos algumas palavras): "char" "for" "float" Esses seriam os caminhos a seguir para validar essas três palavras. Então nosso código seria esse mais ou menos: #include <stdio.h> #define TAM 100 void qInicio ( char palavra[TAM]); void q0( int contador, char palavra[TAM]); void q1( int contador, char palavra[TAM]); void q2( int contador, char palavra[TAM]); void q3( int contador, char palavra[TAM]); void q4( int contador, char palavra[TAM]); void q5( int contador, char palavra[TAM]); void q6( int contador, char palavra[TAM]); void q7( int contador, char palavra[TAM]); void q8( int contador, char palavra[TAM]); void q9( int contador, char palavra[TAM]); void qFim(); void qErro(); int main(){ char palavra[TAM] = "for"; //casos de comprovação: o programa só aceitará "char", "for" ou "float". Mas você pode por qualquer frase qInicio(palavra); return 0; } void qInicio ( char palavra[TAM] ){ int contador = 0; q0( contador, palavra ); } void q0( int contador, char palavra[TAM] ){ if ( contador < TAM ){ if ( palavra[contador] == 'f' ){ q1( ++contador, palavra ); }else if (palavra[contador] == 'c'){ q8( ++contador, palavra ); }else{ qErro(); } } } void q1( int contador, char palavra[TAM] ){ if ( contador < TAM ){ if ( palavra[contador] == 'l' ){ q2( ++contador, palavra ); }else if (palavra[contador] == 'o'){ q3( ++contador, palavra ); }else{ qErro(); } } } void q2( int contador, char palavra[TAM] ){ if ( palavra[contador] == 'o' ) { q5 ( ++contador, palavra ); } else { qErro(); } } void q3( int contador, char palavra[TAM] ){ if ( palavra[contador] == 'r' ) { q4 ( ++contador, palavra ); } else { qErro(); } } void q4( int contador, char palavra[TAM] ){ qFim(); } void q5( int contador, char palavra[TAM] ){ if ( palavra[contador] == 'a' ) { q6 ( ++contador, palavra ); } else { qErro(); } } void q6( int contador, char palavra[TAM] ){ if ( palavra[contador] == 't' ) { q7 ( ++contador, palavra ); } else { qErro(); } } void q7( int contador, char palavra[TAM] ){ qFim(); } void q8( int contador, char palavra[TAM] ){ if ( contador < TAM ){ if ( palavra[contador] == 'h' ){ q9( ++contador, palavra ); }else{ qErro(); } } } void q9( int contador, char palavra[TAM] ){ if ( palavra[contador] == 'a' ) { q3 ( ++contador, palavra ); } else { qErro(); } } void qErro(){ printf("Palavra regeitada pelo automata!\n"); } void qFim(){ printf("Palavra Aceita pelo automata!\n"); } Pode inserir qualquer palavra na string que esta na primeira linha do for porem o programa só aceitará uma das 3 que citei no inicio. De uma estudada e se tiver duvidas pergunte. Tente resolver com isso pois é muito potente esse sistema.
  7. trocar &hazzu.n por hazzu.n no printf
  8. para saber se o arquivo ta vazio ou não da uma olhada no tamanho do arquivo. Averigue se o tamanho do arquivo é o mesmo do sizeof da tal struct que você enviou para o arquivo. você pode usar um editor hexadecimal para ver o conteúdo do tal arquivo binário. Ah!!! E o mais importante é que se é arquivo binario o modo de abertura deveria ser w+b 😉
  9. Sempre tenha claro em qual linguagem você está. Dependendo da linguagem você vai ter que traduzir de 1 até 10 em 0 até 9. Porque em algumas linguagens começa a contar de zero. Parece uma coisa banal mas não é... os índices em C/C++ lembre que você está trabalhando diretamente com a memória ram, qualquer erro é fatal.😉
  10. o pior de todos os erros é esse i <= 10. Se você tem 10 posições você conta desde 0 até 10-1, ou seja 9. O correto é i < 10, você ta estourando os índices tentando ler e escrever além do que você reservou.
  11. Isso é errado, usar fflush junto com stdin. fflush foi concebido para ser usado com stdout, o fato de que funcione é pura sorte. Existe uma infinidade de formas sobre como limpar o buffer do teclado na internet. acho que você deveria dar uma olhada aqui: https://forum.imasters.com.br/topic/336835-tutorial-systempause-e-fflushstdin/ É uma leitura indispensável já que lhe fará compreender melhor sobre o buffer do teclado, que é um problema que você vai se enfrentar a diário, por isso é indispensável. Recomendo ler com atenção e ir pondo em prática tudo o que for vendo neste post.
  12. si você declarou p como um vetor p[1000] na linha gets ( p.nome ) ; o p.nome ta errado. O p.nome é um vetor e não uma variável normal, o correto seria p[x].nome, sendo o x o índice desejado. Ademais use o botão <> para postar códigos-fonte
  13. si entrar no if simplesmente termina aí a função, com um return 1, não há nada mais a analisar. Caso sejam diferentes entra no else e se invoca a si mesma(recursividade).
  14. n da para ver as imagens. suba a um servidor de fotos e ponha o link aqui. e use o botao <> para o código
  15. Use o botão <> para postar códigos
  16. quando n tiver chaves somente terá como efeito a seguinte instrução, neste caso o return 1;, por isso esta identado com 4 espaços. Para deixar claro o returne tem 2 funçoes, 1º deter a função e 2º retornar um valor. Uma função pode ter tantos return como desejar porem ao atingir o primeiro automaticamente sai da função nesse ponto. Uma função do tipo void tambem pode ter algum return porem sem valor. A seguinte função é perfeitamente valida: void foo(){ return; } note que não retorna valor algum, serve somente para deter a função neste ponto. Util quando desejar deter o programa em algum ponto depois de, por exemplo, fazer uma comprovação. Sobre if, si somente tiver uma instrução não precisa por chaves, o programa toma a seguinte linha de código como parte deste if, porem se tiver mais de uma linha, neste caso é obrigado a usar chaves, porque si não, como falei, o programa vai achar que somente uma linha pertence ao if, as demais ficam como fora. As chaves servem para informar ao programa que um bloco de instruçoes pertencem a um if anterior, ou a uma função, ou um for por exemplo.
  17. Si pensar bem uma sala de cinema, olhando desde acima, parece uma matriz. Como bem podemos ver na foto, neste caso seria uma matriz de 13 por 8. É uma matriz de que?. Lógico que é uma matriz de poltronas. Então trata-se de structs pois cada poltrona tem um conjunto de dados, como idade, numero da poltrona etc. Crie uma matriz do tamanho que quiser e crie um menu com opções como vender entrada, listar a matriz, sair, etc. quando for vender a entrada primeiro pergunte a idade, se for menor de 16 indique n não é possível vender a tal entrada, caso contrario for maior de 16 então pergunte a poltrona. Lembre-se de averiguar se a poltrona esta ocupada, se for assim informe de que esta ocupada e volte a pedir outra poltrona. O programa pode ser complexo como você quiser, você até pode dar o valor em reais do total das poltronas que foram vendidas.
  18. #include <stdio.h> #include <stdlib.h> #define TAM 10 //Tamanho do vetor de structs #define ITE 3 //representa o numero de iterecoes que vai realizar cad laço for. Serve para limitar o numero de provas a realizar e assim n ter de preencher tantas vezes em cada caso de teste. struct dados { int numero; char nome[50]; }; void manipula_um_par ( int *a ) { if ( *a%2 == 0 ) *a = *a / 2; } void manipula_pares ( struct dados x[10] ) { int z; for ( z = 0; z < 10; z++ ) { if ( x[z].numero % 2 == 0 ) { manipula_um_par ( &x[z].numero ); } } //return &x[10].numero; } int main() { struct dados v[TAM]; int x; for ( x = 0; x < ITE; x++ ) { printf ( "\nDigite o nome do %d aluno: ", x + 1 ); fflush ( stdin ); fgets ( v[x].nome, 20, stdin ); printf ( "\nDigite o %d numero: ", x + 1 ); scanf ( "%d", &v[x].numero ); } manipula_pares ( v ); for ( x = 0; x < ITE; x++ ) { printf ( "--- %d ", v[x].numero ); } return 0; }
  19. Boa noite. De forma padrão, tanto c como c++ não aceitam criar janelas, botões etc, porem a linguagem foi criada com a idéia de que poderia ser ampliada suas funcionalidades através de bibliotecas que são os tais arquivos de cabeçalho que incluímos ao principio, claro que as vezes não tão simples assim. O que você deve fazer é buscar uma biblioteca que lhe permita fazer isso, incluir novas funcionalidades que lhe permita criar interfaces de usuário, para c++ existe algumas como wxwidigets, qt, etc. Busque tutoriais, pdfs, etc sobre wxwidigets ou qt, ou sobre qualquer uma das bibliotecas que você escolher. Para saber quais bibliotecas existem sobre c++ escreva no google isso-> "interfaces gráficas c++". Da uma olhada nas diversas paginas que aparecer na busca e tente se decidir por uma. você pode buscar também "Melhor biblioteca gráfica para c++". Acredito que uma boa leitura antes de sair buscando tutoriais seria esta: https://br.ccm.net/faq/10999-bibliotecas-para-interfaces-graficas-gui
  20. recomendo ver esses videos: https://www.youtube.com/watch?v=W-X2_v4Oyx8 https://www.youtube.com/watch?v=ixk5RIqABjI https://www.youtube.com/watch?v=wUrk9AK6ItY
  21. scanf tem a "má" costume de ler até encontrar um espaço um tabulador ou encontrar o caractere '\n'. Prove usar o scanf desta forma: scanf("%[^\n]%*c", N); Com isso você será capaz de ler nomes com espaços. Procure aprender como limpar lixo do buffer, certamente você tem problemas com isso tambem, para isso vai no google e escreve algo parecido a "como limpar o buffer na linguagem C".
  22. o programa g++.exe se encontra dentro da pasta bin onde você instalou o compilador certamente você tenha que navegar até essa pasta usando cd etc. Outra opção é você declarar a tal pasta bin nas variaveis de ambiente assim funcionaria corretamente. Não funciona porque o comando correto seria indicando onde está o tal g++.exe, se você tivesse instalado ele no disco c seria algo como isso-> C:\mingw\bin\g++.exe Acredito que a forma mais facil é declarar a pasta bin no path do sistema. E sobre codeblocks.... Que erro da?
×
×
  • Criar Novo...