Jump to content
  • 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

Recommended Posts

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,

Share this post


Link to post
Share on other 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!

Share this post


Link to post
Share on other 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!

Share this post


Link to post
Share on other sites
Cr4zYPT

Tipo eu estou a utilizar os forms do visual studio. Aqui "nao existem main" e nao sei qual e o compilador do studio

Share this post


Link to post
Share on other sites
Cr4zYPT

Executei o teu programa e o sizeof retonou 1.

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

Share this post


Link to post
Share on other 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?

Share this post


Link to post
Share on other 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!

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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 :)

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.