Duvida (principiante)

Errado. Segundo as normas ANSI, a função main pode ter 2 cabeçalhos:

Código:
int main()
ou
Código:
int main(int argc,char *argv[])
A diferença que existe na 2ª é que esta recebe parâmetros através da linha de comandos.

http://www.digilife.be/quickreferences/QRC/C%20Reference%20Card%20(ANSI)%202.2.pdf
http://members.aol.com/wantondeb/#MAIN

Se quiseres que o programa não pare, podes experimentar corrê-lo a partir da linha de comandos ou então colocar um getchar() (e não um getch(), não é preciso sobrecarregar o compilador com processamento de bibliotecas - conio.h - desnecessariamente) antes do return 0 (o qual deve estar presente!).

pois, mas se coloco o getchar(), tiro o conio.h e o getch() (certo?), e quando executo o programa mal carrego enter vai abaixo.
 
pois, mas se coloco o getchar(), tiro o conio.h e o getch() (certo?), e quando executo o programa mal carrego enter vai abaixo.

Isso acontece porque quando tu introduzes a idade (por ex: 8), na verdade não introduzes 1 valor, mas sim 2, uma vez que após carregares na tecla 8, de seguida carregas no ENTER. Ora assim estás a ler para o buffer de entrada 2 valores (8 + '\n' ; \n é o caracter que representa o ENTER). O 1º valor (8) é aproveitado para guardar na variável "age" enquanto que o 2º se mantém no buffer. O que acontece ao colocares o tal getchar() antes do return é que esse getchar vai ler um caracter do standard input (normalmente, o teclado), mas como o buffer de entrada já contém um caracter (o tal \n), o getchar() vai aproveitar esse caracter e, como tal, o programa prossegue para o return e termina sem tu veres nada.
A solução aqui consiste em limpar o buffer de entrada que pode ser feito colocando esta linha (antes do tal getchar()):
Código:
scanf[COLOR=#66CC66]([/COLOR][COLOR=#FF0000]"%*[^[COLOR=#000099][B]\n[/B][/COLOR]]"[/COLOR][COLOR=#66CC66])[/COLOR]; scanf[COLOR=#66CC66]([/COLOR][COLOR=#FF0000]"%*c"[/COLOR][COLOR=#66CC66])[/COLOR];
Podes ver a explicação para esta linha aqui.
 
Back
Topo