Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Cr4zYPT

Problema Estupido com Visual Studio 2010

Mensagens Recomendadas

Cr4zYPT

Boas,

Estou a tentar ler um ficheiro e consigo de certa maneira mas nao percebo porque não consigo da forma que estou a fazer. O meu objetivo e fazer um programar com ambiente grafico portanto estou a utilizar os forms do visual studio.

Tentativa 1

No visual studio crio um projecto vazio, crio um ficheiro .c e escrevo meu codigo para leitura de ficheiro.

			 FILE *f;
			 int tamanho;
			 char *asd;

			 f=fopen("mail.txt","r");
                                 if(f==NULL)
                                       erro("Erro abrir file");

			 fseek(f,0,SEEK_END);
			 tamanho=ftell(f);
			 rewind(f);
			 asd=(char *)malloc(tamanho+1);
			 fread(asd,1,tamanho,f);

Se fizer assim tudo corre perfeitamente e o ficheiro e copiado na integra para string.

Tentativa 2.

Crio uma windows form application, meto um botao e neste escrevo o mesmo codigo de cima, no entanto nao me copia o ficheiro todo. Simplesmente copia o inicio dele.

Nao sei o que se passa.

Need help,

Cumpz,

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pmg

Se calhar, com um projecto vazio fazes uma aplicação de 32 bits e com um projecto "windows form application" fazes uma aplicação de 64 bits.

As diferenças entre 32-bits e 64-bits prendem-se com os tamanhos dos ponteiros e possivelmente dos long...

Desfaz-te dos pressupostos que o teu código tem:

1) int e long podem não ser do mesmo tamanho: declara a variavel tamanho como long

2) #include <stdlib.h> e não uses o cast ao resultado do malloc

3) verifica o retorno de fread e imprime uma mensagem de erro se for diferente de tamanho


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pmg

O visual studio nao compila se não fizer casting

Então não é um compilador de C!

Experimenta este programeta

#include <stdio.h>
int main(void) {
    printf("sizeof 'a' tem valor %d (devia ser 4 em C, mas nao é garantido; 1, garantido, em C++)\n", (int)sizeof 'a');
    return 0;
}

ideone C : http://ideone.com/J9bvU

ideone C++ : http://ideone.com/R5bID


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Cr4zYPT

Acho que descobri a diferença. Ao criar projecto vazio e ao adicionar ficheiro .c ele usa compilador C (sizeof retorna 4) ao usar forms ele utiliza compilador C++(sizeof retorna 1).

Mesmo assim o fread nao deveria funcionar?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pmg

Mesmo assim [com C++] o fread nao deveria funcionar?

Não faço ideia: não sei C++ ... estás no quadro errado.

Em C faz o que te disse: inclui todos os headers que contenham prototipos das funções que usas; desfaz-te dos pressupostos que o teu código assume; verifica o valor de retorno das funções da biblioteca.


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Cr4zYPT

fiz o mesmo usando um compilador c++ e consigo copiar o ficheiro todo para a string.

Deve existir alguma diferença quando uso os forms do visual studio

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
renafi

Executei o teu programa e o sizeof retonou 1.

Então pelos vistos e compilador c++, mesmo assim devia funcionar o fread nao?

Atenção que tens o main. A linguagem continua com a lógica do main. Procura no ficheiro Program.cs


Oracle Certified Professional - AdministraçãoOracle Certified Professional - Pl/sqlMCPD - Microsoft Certified Professional DeveloperMCTS - Microsoft Certified Technology Specialist

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Flinger

Podes considerar como a tua "main()" o construtor do form.

No entanto, acho que estás a ir pelo sítio certo, ao colocares o código no evento de um botão.

Pelo contrário, acho que estás a fazer asneira em misturar C com Visual Studio ;). O Visual Studio é bastante complexo de configurar, especialmente para quem esteja habituado a fazer tudo numa Makefile. Além do mais, a framework .net (da qual necessitas para criar os forms), não costuma gostar que o utilizador manipule directamente a memória (malloc).

Não estou a dizer que não funciona, apenas estou a dizer que não acho muito boa ideia misturar as águas. Alguns dos probllemas já os começaste a descobrir :)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Flinger

// testFormsC.cpp : main project file.

#include "stdafx.h"
#include "Form1.h"

using namespace testFormsC;

[sTAThreadAttribute]
int main(array<System::String ^> ^args)
{
// Enabling Windows XP visual effects before any controls are created
Application::EnableVisualStyles();
Application::SetCompatibleTextRenderingDefault(false); 

// Create the main window and run it
Application::Run(gcnew Form1());
return 0;
}

Criei um projecto de windows forms, no VS2010, e ele criou-me automaticamente um cpp com esse código.  Ou seja, existe uma main. De qualquer forma, continuo a dizer que estavas a colocar o código no sítio certo, se quiseres que a acção seja despoletada pelo clique no botão.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
gibran

preciso de uma ajuda para fazer um programa no windows application form.

Tema

Deselvover o jogo "adivinhar o numero segredo" com uma windows application form.

Quando usuario clicca sobre o "Button Inicio Jogo" a aplicaçao "gera" un numero segredo entre 0 e 100, o usuario tem 10 tentativas por descrober este numerous.

Quando um usuario escreve o numero, a applicaçao va dizer se adivinhou ou nao, se nao va dizer se o numero segredo è mais grande o pequeno. Se usuario falha a aplicaçao va diminuir as tentativas disponivel.

Se a diferença entre o numero inserido e numero segredo è mais de 20 o testo do messangem muda em "Guidado voce esta muito lonje o numero é muito mais pequeno" ou "Guidado voce esta muito lonje o numero é muito mais maior":

O usuario escreve o numero num textbox e clicca o button "Jogo" e espera a resposta da applicaçao.

O usuario pode pedir uma ajuda (clicca sobre button "Ajuda") mas se faz isto ele perde uma tentiva.

Ajuda:

1. Primeira ajuda Applicaçao va dizer se è un numero pari

2. Segunda ajuda Applicaçao va dizer se è multiplo de 3

3. Terca aiuda Applicaçao va dizer se è multipo de 5

Se as tentativas chegam a 0, a applicaçao va dizer qual era o numero segredo.

Exemplo

Usuario clicca sobre "Inicio gioco" a applicaçao gera 35. Usuario

Mensagem da appliçao

Tentativas

Escreve 70

Guidado voce esta muito lonje o numero é muito mais pequeno

9

Escreve 25

Falhou, o numero è mais grande

8

Escreve 42

Falhou, o numero è mais pequeno

7

Escreve 33

Falhou, o numero è mais grande

6

Clicca Ajuda

O numero segredo è impar

5

Escreve 39

Falhou, o numero è mais

4

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nelsonr

Boas gibran,

colocares essa pergunta em outros topicos não vais conseguir obter ajuda.

Tens de criar um tópico para a tua questão.

E convém teres alguma pergunta especifica. Ninguem te vai fazer o trabalho de escola

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.