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.