Bom galera minha duvida no enter em c [RESOLVIDO]

1. Bom galera minha duvida no enter em c [RESOLVIDO]

Albert Einstein
lordeinstein

(usa Manjaro Linux)

Enviado em 19/10/2016 - 19:11h

Bom galera eu sou iniciante em programação sou bem noob.
Então é o seguinte na tabela ASC o 13 é o enter certo fiz o seguinte.

do
{
num=num+1;
printf("## GRUPO QT:%i ##\n\n",num);
scanf("%i", &num);
system("clear");
}
while(tecla==13);

mais o que eu queria que ali fizesse se eu aperta o enter uma fez ele repete o loop.
mais se eu aperta duas vezes o enter ele sair do loop.

unica coisa que conseguir fazer é só sair do loop mesmo apertando o enter uma vez.


  


2. Re: Bom galera minha duvida no enter em c [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 19/10/2016 - 20:28h

lordeinstein escreveu:

Bom galera eu sou iniciante em programação sou bem noob.
Então é o seguinte na tabela ASC o 13 é o enter certo fiz o seguinte.

do
{
num=num+1;
printf("## GRUPO QT:%i ##\n\n",num);
scanf("%i", &num);
system("clear");
}
while(tecla==13);

mais o que eu queria que ali fizesse se eu aperta o enter uma fez ele repete o loop.
mais se eu aperta duas vezes o enter ele sair do loop.

unica coisa que conseguir fazer é só sair do loop mesmo apertando o enter uma vez.


Você precisa de uma instrução em C que receba um carácter por vez e scanf() não faz isto porque ele recebe dados mais complicados cuja entrada é encerrada com <Enter>.

No caso você precisa ler as teclas e criar um verificador com if() para saber se a tecla é <Enter>.

Se sim some 1 ao contador. Se não continue.

Daí entra o while. Apenas enquanto o contador for menor que três. Entende?

Agora falta apenas a leitura do tal carácter. Qual instrução faz isto? Lembrando que não existe conio.h porque é fora de padrão e você precisa arrumar outro jeito.

Dê uma pesquisada e retorne.

----------------------------------------------------------------------------------------------------------------
Nem direita, nem esquerda. Quando se trata de corrupção o Brasil é ambidestro.
(anônimo)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden



3. Re: Bom galera minha duvida no enter em c

Paulo
paulo1205

(usa Ubuntu)

Enviado em 20/10/2016 - 13:42h

lordeinstein escreveu:

Bom galera eu sou iniciante em programação sou bem noob.
Então é o seguinte na tabela ASC o 13 é o enter certo fiz o seguinte.


O que você disse não está certo. Vamos por partes:

    - Não existe “tabela ASC”. Você provavelmente está se referindo ao ASCII, que é a abreviatura de American Standard Code for Information Interchange. Como se pode ver, o pedaço “II” não é 2 em numerais romanos, mas parte fundamental do nome da coisa.

    - O ASCII se preocupava inicialmente com a representação padronizada de símbolos e sinais relacionados ao funcionamento de equipamentos de comunicação de texto impresso, como teletipos, impressoras ou TELEX, e instruções de controle dos equipamentos, como a movimentação da folha ou do mecanismo de impressão.

    - Como alguns desses equipamentos eram utilizados em conjunto com computadores, diversos computadores acabaram incorporando nativamente o uso de ASCII.

    - O ASCII não se preocupava tanto com teclas, mas sim com efeitos produzidos. Uma máquina de TELEX, por exemplo, podia ter até uma tecla que avançava o papel e provocava o retorno do carro tracionador ou cabeça de impressão, mas essas duas funções também podiam ser conseguidas de modo independente.

    - Não existe, portanto, “Enter” no ASCII, mas operações separadas de avanço de linha (line feed, abreviada como LF) e para retorno do carro (carriage return, abreviado como CR). Essas ações constituem caracteres de controle separados no ASCII.

    - O código 13 do ASCII corresponde ao CR. Já o LF tem valor 10.

    - Na linguagem C, por convenção o fim de linha é indicado pelo caráter '\n'.

    - A linguagem C procura abstrair-se de detalhes de implementação. É teoricamente possível ter C rodando num computador que não empregue ASCII.

    - Assim sendo, mesmo que seja comum que o caráter '\n' seja mapeado para LF (e, portanto, com o valor inteiro 10) em computadores que empregam o ASCII, um programa em C não deve assumir essa equivalência. O certo é usar mesmo a constante literal '\n', e o compilador vai escolher o valor apropriado.

    - O C, de modo a mais forte que o ASCII, deliberadamente não tem noção de o que seja uma tecla. As rotinas padronizadas de entrada de dados não saberiam dizer, em princípio, se estão lendo de um arquivo em disco, de um teclado, da rede ou de qualquer outra fonte de dados.

    - Por isso mesmo, sua preocupação deve ser muito mais com os dados que o programa vai receber, e não exatamente com aquilo que o usuário fez.

do
{
num=num+1;
printf("## GRUPO QT:%i ##\n\n",num);
scanf("%i", &num);
system("clear");
}
while(tecla==13);

mais o que eu queria que ali fizesse se eu aperta o enter uma fez ele repete o loop.
mais se eu aperta duas vezes o enter ele sair do loop.


Eu entendo que você quer, no fim das contas, detectar uma linha vazia. Isso é fácil de fazer, desde que você trabalhe com strings.

Em vez de usar scanf() para ler um valor inteiro, use fgets() para ler a linha inteira de uma vez. Se a operação de leitura falhar ou se a linha lida contiver apenas o caráter de fim de linha ('\n'), então você interrompe o loop. Se não, você tenta converter a string da linha em valor numérico. Você pode inclusive tratar eventuais erros de entrada, caso o usuário digite alguma coisa não-numérica na linha recebida.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts