paulo1205
(usa Ubuntu)
Enviado em 13/11/2019 - 15:00h
Jhevison escreveu:
Bom, não é um problema em si no meu código, apenas eu não consigo quebrar linha dentro do editor.
Minha duvida é com relação a quebra de linha, sem que ao clicar ENTER ou Q, o programa passe para próxima etapa.
O que eu quero é, clicar ENTER ou Q e o programa quebrar uma linha, e eu continuar escrevendo dentro do fgets. Estou utilizando a função fgets.
Qualquer solução, mesmo que seja de forma diferente, eu aceito. O máximo que consegui foi isto.
Não vou colocar todo o código, mas basicamente é:
char a;
printf(":");
fgets(&a, 100, stdin);
if (a == 113){
printf("\n");
}
// Compara se A tem o valor de Q(ASCII), porém isso só foi um teste, não vou utilizar o Q e, sim o ENTER. E, além disso, não soluciona minha dúvida, por conta que se eu digitar qualquer outro texto, elimina totalmente a comparação. Sem dizer pelo fato que ao invés de quebrar uma linha(até pula), o problema passa para próxima etapa.
Você tem, sim, problemas no seu código. Você reserva apenas um
byte para a variável
a e manda ler cem
bytes (na verdade, ler noventa e nove e ter mais um alocado para o terminador da
string). Você deveria usar um
array de caracteres, em lugar de um caráter só, e com um tamanho que seja suficiente para armazenar a quantidade de caracteres que você quer ler (e mais um
byte nulo, terminador da
string). Além de corrigir isso, você deveria testar o valor devolvido por
fgets() antes de testar o conteúdo eventualmente lido, pois sempre existe a possibilidade de a operação de leitura falhar, e, nesse caso, o conteúdo do
array pode não ser confiável.
Mas se você quer fazer um editor visual, você provavelmente não vai querer usar
fgets(), e talvez nenhuma outra função da biblioteca padrão para entrada de dados. A resposta imediata ao teclado é algo que pode depender de aspectos particulares do sistema operacional e condições de execução que não são visíveis para funções padronizadas da linguagem e de sua biblioteca. Possivelmente você teria de recorrer a operações de baixo nível, específicas do SO, ou usar uma biblioteca externa de mais alto nível, tal como Curses/nCurses/pdCurses, ConIO, TurboVision ou mesmo GUIs, como Qt, GTK+ ou wxWidgets, que use uma API comum a múltiplas plataformas para esconder os detalhes de baixo nível de cada uma dessas plataformas.
... “Principium sapientiae timor Domini, et scientia sanctorum prudentia.” (Proverbia 9:10)