C - começei agora

metRo_

Power Member
Começei esta noite com C.

Tenho duas duvidas, que o video pelo qual me estou a guiar, visto que é um curso em video, nao me tirou as duvidas.

Código:
#include <stdio.h>

main()
{
    int age;
    
    printf("Hello World\n");
    printf("Please enter your age: ");
    scanf("&d", &age);
    printf("The age you entered is %d\n", age);
    
    fflush(stdin);
    getchar();
}

com este code, eu devia colocar a idade que tenho e aparecia a idade que eu pus, mas o que acontece é que aparece um 2, que tambem apareceu com o homenzinho explikou umas cenas bem para tras...

a outra duvida é porque é que o run não funciona e o exe abre em full screen.. :S

abraços

Sugestão: Não era melhor dentro da programação abrir varios directorios, tipo para C, html, java, e por ai fora?!
 
scanf("&d", &age);

copiaste mal a linha.

o correcto é

scanf("%d", &age);

quanto ao resto, nao percebi mt bem, tenta alt + enter quando executas o .exe.

cumps, e força nisso.
 
Código:
    fflush(stdin);
    getchar();

O que pretendes com estas duas linhas? As anteriores estão correctas e chegam para o teres o output que queres.

Mesmo assim experimentei com o código igual ao k puseste e dá..não altera nada :P

EDIT: Ups, o Favas tem razão...nem reparei que tinhas posto & e com o hábito pus logo % :D
 
Quando dissest que tinha passado mal a linha vi logo onde me tinha enganado. lol
Tipo quando faço run, ele não executa, e quando abro o exe, ele abre em ecran inteiro, e tambem noto isso, porque quando compilo, acontece o mesmo, tipo o ecran fica todo preto, parece que desliga, mas desaparece logo.. lool obrigado

EDIT: Segundo o tutorial isto server para depois de carregares enter ao inserir a idade o exe não fechar, mas se alguem quiser dar uma explicação.
fflush(stdin);
 
Última edição:
Eu prefiro o include IOSTREAM. Acho que é mais facil:

#include<iostream>

using namespace std;
int main ();
{
int age;

cout<<"Hello world \n";
cout<<"Please enter your age"<<endl;
cout<<"The age you entered is"<< age << endl;


getchar();
return 0;
}
 
Eu prefiro o include IOSTREAM. Acho que é mais facil:

#include<iostream>

using namespace std;
int main ();
{
int age;

cout<<"Hello world \n";
cout<<"Please enter your age"<<endl;
cout<<"The age you entered is"<< age << endl;


getchar();
return 0;
}
Como disseram isso é C++.

Correção:

#include <iostream>

using namespace std;

int main()
{
int idade;
cout << "Ola Mundo\n";
cout << "Digite uma idade:\n";
cin>>idade;
cout << "A idade colocada foi: "<<idade<<"\n";
system("Pause");
}
 
Código:
    fflush(stdin);
    getchar();

O que pretendes com estas duas linhas? As anteriores estão correctas e chegam para o teres o output que queres.

O fflush deve ser para tirar o <Enter> do buffer do teclado para o getchar funcionar senão o getchar aceitava logo o enter do ultimo scanf que estava no buffer sem interromper o programa.
 
O fflush deve ser para tirar o <Enter> do buffer do teclado para o getchar funcionar senão o getchar aceitava logo o enter do ultimo scanf que estava no buffer sem interromper o programa.

Exactamente. O scanf apanha o valor que escreveres na linha de comando, mas o [SIZE=-1]carriage return (ou enter) fica no buffer do teclado (stdin). Ou seja se n utilizaroes o fflush(stdin) o getchar() apanha o "enter" q ficou no buffer e o programa terminava na mesma.

Quando programava em C tinha grandes dores de cabeça com este "bug" (n é bem um bug, mas ás vezes parece :P). Esta técnica é boa, mas há situações bem mais rebuscadas em que irá falhar, nomeadamente qdo houverem ciclos ou ficarem coisas no buffer que era suposto apanhar mesmo.
[/SIZE]
 
Para não fechar logo, experimenta isto:

Utiliza isto para não fechar logo quando executas o exe:
#include <stdio.h>
main()
{
int age;
printf("Hello World\n");
printf("Please enter your age: ");
scanf("&d", &age);
printf("The age you entered is %d\n", age);
fflush(stdin);
scanf(".");
}

Adiciona o scanf("."); para o scanf ficar à espera de um caracter qualquer, ou seja, quando introduzido o ENTER, ele termina...

:-D
 
Não percebi essa do "." dentro do scanf..., seria mais legivel para outro programador usar scanf("%s") ou um getchar (como foi sugerido antes).

Esse tipo de programação é um bocado à "desenrasca"...

abraços, HecKel
 
Pá ó pessoal para o programa não fechar logo basta adiconar esta linha no final do código

system("pause");

ou seja pausa de sistem. Assim só depois de pressionares uma tecla é que ele fecha, hehe.

Cumps
 
Pois mas o system("PAUSE") da erro de comando inválido no linux, acho que o melhor é mesmo usar o

fflush(stdin);
getchar();

e ficam com um codigo que funciona em qualquer SO...
praquê trafulhices se há soluções melhores pelo mesmo preço?


Cumprimentos
 
Pois mas o system("PAUSE") da erro de comando inválido no linux, acho que o melhor é mesmo usar o

fflush(stdin);
getchar();

e ficam com um codigo que funciona em qualquer SO...
praquê trafulhices se há soluções melhores pelo mesmo preço?


Cumprimentos

Pois, felizmente isto não são trafulhices e certamente que a pausa de sistema no Linux se faz com outros comandos. Talvez se pesquisares um pouco mais descubras, ou então mudas de SO :007: . Cumps
 
Back
Topo