scanf() +float

1. scanf() +float

Charles
elbrabo

(usa Slackware)

Enviado em 24/07/2006 - 12:59h

Galera ... sou iniciante em C e tenhu uma duvida
q presumo ser boba para os mais experientes ...
Qdo executo um programa q le uma variavel FLOAT com SCANF(), o meu programa simplesmente fecha sem retornar nenhum erro?
Ex:

void main()
{
float x;
scanf("%f",%x); //Nesse ponto o programa fecha
printf("%1.2f",x);
getch();
}

Obs: O programa fecha apos ler a variavel
Grato!


  


2. Re: scanf() +float

Tiago Barcellos Peczenyj
pacman

(usa Ubuntu)

Enviado em 24/07/2006 - 15:05h

o uso do % e do & nesse caso são diferentes. o correto é:

scanf("%f",&x);

eu nem imagino o que seja %x ou por que isso compila, mas o fato é que não faz sentido. vc usa o %f dentro do scanf por que vc informa que vai ler uma variavel do tipo f nessa posição - é uma convenção. o & da variavel significa que vc está passando o endereço de memória da variavel x para que a função scanf consiga alterar o seu valor.

pesquisa sobre 'passagem de referência' ;-)


3. Re: scanf() +float

Charles
elbrabo

(usa Slackware)

Enviado em 25/07/2006 - 16:24h

Foi mal galera ...
erro de digitação ...
o comando correto da leitura da variavel:

scanf("%f",&x);

Vlw


4. Re: scanf() +float

Tiago Barcellos Peczenyj
pacman

(usa Ubuntu)

Enviado em 25/07/2006 - 17:00h

agora sim.

"O programa fecha apos ler a variavel" - defina 'fecha'. vc abre ele numa janela windows? se sim, isto acontece por que o scanf não limpa o buffer de entrada. uma forma de evitar isso é usar um flush(stdin); depois do scanf.


5. Re: scanf() +float

Gabriel Camargos
arcanjo_mg

(usa Debian)

Enviado em 25/07/2006 - 18:09h

Amigo, eu acho que o problema esta no uso do getch();
talvez ele esta fazendo com que saia errado. Me diga, vc esta no ambiente Windows ou Linux?
Para a funçao getch(); vc precisa da biblioteca conio.h, vc a incluiu?
bom, eu compilei o seguinte codigo aqui usando o Dev-C++ e ele executou exatamente como devia:

#include <stdio.h>
#include <conio.h>

int main()
{
float x;
scanf("%f",&x); //Nesse ponto o programa fecha
printf("%1.2f",x);
getch();

return 1;
}

Por favor, diga o ambiente e o compilador que esta usando para que seja testado seu codigo que aparentemente esta normal. No linux nunca consegui da certo com uma funçao so para pausar, pois nao tem a biblioteca conio.h por que nao é uma biblioteca ANSII entao se estiver no linux tenta getchar();


6. Re: scanf() +float

Tiago Barcellos Peczenyj
pacman

(usa Ubuntu)

Enviado em 25/07/2006 - 18:24h

O programa não compilaria se a função não existisse.

O header só serve para informar o protótipo da função, vc pode compilar sem ela - gera um warning pois o compilador assume que a função vai retornar um inteiro pode default nesse caso.


7. peczenyj

Gabriel Camargos
arcanjo_mg

(usa Debian)

Enviado em 26/07/2006 - 00:34h

Olha, pelo que intendi vc disse que nao precisa de biblioteca para compilar uma funcao como por exemplo getch(); pois eu digo que esta enganado, a alteraçao na estrutura do main que eu fiz foi so por comodite do ambiente em que eu estava.

elbrabo

Para usar o getch(); no windows vc deve incluir uma biblioteca que a contenha como a conio.h
testei no linux, usando a biblioteca ANSII stdio.h vc pode substituir o getch(); por getchar(); que funciona legal.

Codigo usando getchar(); e no padrao ANSII

#include <stdio.h>
#include <stdlib.h>

void main()
{
float x;
scanf("%f",&x); //Nesse ponto o programa fecha
printf("%1.2f",x);
getchar();
}


saida do terminal:

camargos@DebianSarge:~$ gcc -o cod cod.c
cod.c: In function `main':
cod.c:5: warning: return type of `main' is not `int'
cod.c:10:2: warning: no newline at end of file
camargos@DebianSarge:~$ ./cod
8
8.00camargos@DebianSarge:~$

como pode ver funciona normal!


8. Re: scanf() +float

Charles
elbrabo

(usa Slackware)

Enviado em 26/07/2006 - 09:30h

pczenyj

O FECHAR que descrevi, ocorre tanto usando o RUN do compilador, como usando o .exe gerado por ele.

arcanjo_mg

Estava usando o ambiente windows, pois ainda estou tentando me adaptar a programação no linux.
Logicamente não sabia dessa INEXISTENCIA da CONIO.H.
De certa forma a troca do GETCH() por GETCHAR() seria, nesse programa, uma forma de dispensar uma biblioteca, uma vez q os dois possuem a mesma função, correto?

Qual seria a biblioteca a substituir a CONIO.H?




9. ...

Enzo de Brito Ferber
EnzoFerber

(usa FreeBSD)

Enviado em 26/07/2006 - 10:28h

A biblioteca seria "ncurses.h"

Para usar você tem que fazer o seguinte:
1°. Informar o header no arquivo fonte (.c):
#include <ncurses/curses.h>

2°. Para compilar, o gcc precisa de um parametro adicional:
$ gcc -o codigo codigo.c -lncurses

Qualquer coisa é so avisa hein...
Espero ter ajudado,
Slackware_10


10. Re: scanf() +float

Perfil removido
removido

(usa Nenhuma)

Enviado em 27/07/2006 - 08:57h

Lembrem-se de que o GCC não aceita que a função main seja um procedimento ( void main(void) ). Você deve fazer com que a função main *sempre* seja uma função int ( int main( int argc, char * argv[] ), que retorna o valor 0 ( zero ) no seu final.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts