Quebra de linha no editor

1. Quebra de linha no editor

Jhevi
Jhevison

(usa Arch Linux)

Enviado em 07/11/2019 - 02:55h

Estou fazendo um pequeno editor de texto para uso próprio em C, porém estou com uns problemas. Eu estou tentando fazer uma quebra de linha para passar pra próxima linha, estou utilizando o "fgets" ao invés do scanf ou outro. Porém sem sucessos. O máximo que consegui foi usar a tecla Q ou ENTER, porém toda vez que faço isso o programa dá o espaço, mas parte para próxima etapa e, eu não sei uma solução para este problema. Se alguém puder ajudar ou apresentar uma outra solução eu iria agradecer muito.


  


2. Re: Quebra de linha no editor

aguamole
aguamole

(usa KUbuntu)

Enviado em 07/11/2019 - 06:37h

Cade o seu código fonte não da para ajudar sem ver onde esta o erro.
Poste o código fonte.

CPU i5-8400 GTX 750 SofRaid 4xSSD 16GB DDR4 mesmo assim uso Lubuntu.


3. Re: Quebra de linha no editor

Jhevi
Jhevison

(usa Arch Linux)

Enviado em 07/11/2019 - 08:39h

aguamole escreveu:

Cade o seu código fonte não da para ajudar sem ver onde esta o erro.
Poste o código fonte.

CPU i5-8400 GTX 750 SofRaid 4xSSD 16GB DDR4 mesmo assim uso Lubuntu.


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.


4. Re: Quebra de linha no editor

Paulo
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)


5. Re: Quebra de linha no editor

Jhevi
Jhevison

(usa Arch Linux)

Enviado em 15/11/2019 - 15:17h

paulo1205 escreveu:

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)


No caso, isso dos 100, só foi um exemplo kk, não estava assim no meu código. Eu tentei refazer o programa de diversas formas, porém não consegui fazer uma quebra de linha(quer dizer, até consegui). Mas dai apareceu vários outros problemas, enfim. Eu desisti, é impossível. (Eu estava usando a ncurses também). Mas não ajudou em muita coisa não, praticamente em nada, tava lendo suas funções, mas não consegui alguma que me ajudasse com o programa. Também não queria de forma visual, até porque não ligo muito para isso.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts