Threat de duvidas - Linguagem C

AMSA

Suspenso
Boas pessoal.

Fiz o seguinte programa:

#include <stdio.h>

int main ()
{
int Dias; /* Declaração de Variaveis*/
float Anos;
printf ("Entre com o numero de dias: "); /* Entrada de dados */

scanf ("%d", &Dias);
Anos = Dias/365.25;
printf ("\n\n %d djas equivalem a %f anos. \n", Dias, Anos);
getchar ();

}

O problema é q ele nao para. Isto é, apos inserir o numero de dias, a janela do DOS desaparece logo.. alguém pode dar uma dica?

By the way eu tou a usar o Dev-C++.

Cumps.
 
Código:
	char opcao[1];
	gets(opcao);


coloca isto no final da tua função principal.


já agora, escreve-se thread. :-D
Código:
int main ()
{
	int Dias; /* Declaração de Variaveis*/
	float Anos;
	printf ("Entre com o numero de dias: "); /* Entrada de dados */

	scanf ("%d", &Dias);
	Anos = Dias/365.25;
	printf ("\n\n %d dias equivalem a %f anos. \n", Dias, Anos);
	getchar ();
[COLOR="Yellow"]	char opcao[1];
	gets(opcao);[/COLOR]
}
 
Última edição:
Usa antes um fflush(stdin) (axo que é qq coisa assim)

Nunca, mas nunca, mas nunca se deve usar o fflush(stdin). Tem comportamento indefinido. Tanto pode funcionar como crashar o programa.

A opção de usar um char array seguido de um gets é mais razoável, mas também ocorrerá um erro no caso de existir mais do que um caracter no stdin (isto é, antes do '\n'), ou então não pausará se essa situação ocorrer (mais uma vez, comportamento indefinido). Basta imaginar o que acontece se introduzirmos "365aa" dias.
 
Coloquei as variáveis a começar por letra minúscula (não é necessário, mas é uma boa prática) e adicionei mais um getchar() no fim e já dá:

Código:
#include <stdio.h>
int main ()
{
int dias; /* Declaração de Variaveis*/
float anos;
printf ("Entre com o numero de dias: "); /* Entrada de dados */
scanf ("%d", &dias);
anos = dias/365.25;
printf ("\n\n %d djas equivalem a %f anos. \n", dias, anos);
getchar();
getchar();
}
 
Olá pessoal.

Consegui meter o programa a dar :D

Agora cá vai umas duvidaszecas:

1 - Pq foi necessario fazer tal coisa?

2 - Há alguma maneira de criar um executavel do programa? Será q envés de salvar como *.c salvo em *.bat?

Outra coisa, antes de começar a programar ou tentar lol, convém primeiro dar uma vista de olhos na teoria dos algoritmos e dos fluxogramas?

Abraços
 
AH! Nem tinha reparado lol. Obrigado!

Estou mesmo a curtir um molhe disto! Tou mesmo ancioso para ter mais ou menos o conhecimento de toda a linguagem e para q serve as coisas para começar a fazer programas meus :D
 
Código:
	char opcao[1];
	gets(opcao);

ao utilizares este pedaço de código, é criado um array, ficando á espera que seja introduzido um carácter qualquer, que por sua vez irá ser guardado na variável opção. Por isso é que fica parado até tu carregares em algo.
 
Última edição:
Ok. Já estive a fazer isso. Ando a seguir um tutorial em português, q até agora esta razoavelmente e tb estou a ler o C for dummies que por sua vez está bastante bem explicadinho. É mesmo para quem numca ouviu ou programou nisto. lol

Bem pessoal, mais uma duvida.

Qual a diferença e/ou vantagem em escrever isto:

#include <stdio.h>

void main ()
{

... etc

e,

#include <stdio.h>

void main (void)
{

... etc

?

Outra coisa:

float abs (float x)
{
if (x<0)
return -x;
else
return x;
}

main ()
{

float a;
printf ("a?");
scanf ("%f", &a);
printf ("O modulo é %f", abs(a));

}

Alguém pode-me explicar o printf ("O modulo é %f", abs(a))?

Principalmente o q q está ali a fazer o %f?

Cumps.
 
É exactamente a mesma coisa. A única vantagem que eu conheço, para o segundo caso, é poderes identificar melhor que não são passados argumentos e que aquilo é uma função declarada. Mas normalmente não se escreve esse void quando não se recebem parâmetros, apenas '()'.

Em relação ao exercício, quando usas um printf, o que está entre aspas é imprimido no standard output, o monitor. Como tal, se fizeres printf("ola\n"); ele imprime "ola" e muda de linha [caracter '\n']. No entanto como achas que imprimes o valor de uma variável?
Se antes do printf fizeres int a = 5; e depois sim, printf("a\n"); isto imprime "a" e não o valor de 'a' criado. Para tal, indicas, dentro da área entre aspas, que vais ter uma variável de um certo tipo, usando o caracter '%' seguido do tipo da variável que queres ver imprimida: f [float], d[decimal, inteiro, double] c[caracter] s[string], e depois há outras variantes como f.2, que imprime duas casas decimais desse float que vais imprimir etc. Portanto, pegas no %f e metes dentro das aspas do printf. No entanto, falta a referência à variável que queres imprimir. Para isso, a seguir a fechar as aspas, acrescentas uma vírgula e metes o nome da variável relativa ao tipo.

int i = 5; /* i é inteiro -> %d */
printf("i vale %d\n", i);

e isto imprime "i vale 5" e muda de linha.

Agora perguntas, e como se faz se se quiser imprimir várias variáveis? Muito simples, pões os %X todos por ordem, e depois de fechar aspas, metes os nomes das respectivas variáveis aos tipos, pela mesma ordem que aparecem dentro de aspas.

int i = 5; /* i é inteiro -> %d */
float f = 3.2 /* f é float -> %f */
char c = 'W' /* c é char -> %c */

printf("i=%d\nf=%f\nc=%c\n", i, f, c); /* ou ainda... */
printf("i=%d\n
f=%f\n
c=%c\n", i, f, c);

o que imprime
"i=5
f=3.2
c=W
"

Portanto, o printf(); recebe como argumentos uma string e/ou a lista de argumentos com os nomes respectivos às variáveis representadas pelos %X dentro do primeiro argumento string.

Dá uma olhadela na revista PROGRAMAR, na edição nr. 7.
http://www.revista-programar.info/front/editions
 
Última edição:
Back
Topo