Apanhando do fgetws [RESOLVIDO]

1. Apanhando do fgetws [RESOLVIDO]

Nick Us
Nick-us

(usa Slackware)

Enviado em 13/03/2019 - 22:17h

Boa Noite. Estou tentando um código mas não funciona, e aparentemente deveria funcionar!
Meu exemplo já cria o arquivo para teste, ele sempre terá apenas 1 linha! Enquanto fgets le, fgetws não funciona!
#include <stdio.h>
#include <wchar.h>
#include <locale.h> // TENTEI Incluir isso mas nem assim ele lê
int main(){
// ESSA 1ª PARTE é apenas pra eu explicar que o mesmo código funciona no fgets. Logo penso que deveria ser igual ao fgetws.
char Texto[1000];

FILE *File_Creation = fopen("Test.txt", "w+");
fputs("Márcia Geração Céu Azul!\n", File_Creation);
fclose(File_Creation);

File_Creation = fopen("Test.txt", "r");
while(fgets(Texto, 1000, File_Creation) != NULL);
printf("%s", Texto);

fclose(File_Creation);
// FIM DA PARTE Exemplo

// PROBLEMAS ESTÃO AQUI
setlocale(LC_ALL, ""); // TENTEI Incluir isso mas nem assim ele lê
wchar_t Texto2[1000];
File_Creation = fopen("Test.txt", "r");
while(fgetws(Texto2, 1000, File_Creation) != NULL); // Não está pegando o Texto!
printf("%s", Texto2); // Imprime apenas a letra M

fclose(File_Creation);
remove("Test.txt");
}

Como informo, o fgetws não está pegando o texto! E eu iria precisar dele para inverter caracteres acentuados que estão no arquivo de texto. Eu conheci esse comando em uma resposta do Paulo para outra pessoa aqui no fórum, o Paulo usou wchar_t para converter uma String com acentos. Isso porque acentos e ç ocupam 2 espaços. Tentei recriar o sistema que ele usou, substituindo o Terminal que era onde a String era digitada, para um arquivo. Porém ele não Lê o arquivo!

No exemplo do Paulo ele usou fgetws(Texto, 100, stdin);
A única diferença que ao invés de EU usar o Terminal para pegar o Texto, estou pegando de um arquivo!
Meus problemas com o fgetws é que sites como esse: http://www.cplusplus.com/reference/cwchar/fgetws/
Estão todos incompletos, nem mesmo o exemplo deles funciona! Pois nem declararam corretamente o wchar_t
E meu exemplo é parecido com o deles que não funciona também!

Gostaria de entender pq essa parte não funciona:
// PROBLEMAS ESTÃO AQUI
setlocale(LC_ALL, ""); // TENTEI Incluir isso mas nem assim ele lê
wchar_t Texto2[1000];
File_Creation = fopen("Test.txt", "r");
while(fgetws(Texto2, 1000, File_Creation) != NULL); // Não está pegando o Texto!
printf("%s", Texto2); // Imprime apenas a letra M

fclose(File_Creation);
remove("Test.txt");



  


2. MELHOR RESPOSTA

Paulo
paulo1205

(usa Ubuntu)

Enviado em 14/03/2019 - 00:35h

Esta linha está errada:
printf("%s", Texto2); 


Em vez de eu lhe explicar o erro, eu vou lhe dar a dica que eu sempre repito: ligue o máximo possível de opções de diagnóstico de código que o compilador permitir. Com o GCC, eu recomendo, no mínimo as opções “-Wall -Werror -O2 -pedantic-errors”.


... “Principium sapientiae timor Domini, et scientia sanctorum prudentia.” (Proverbia 9:10)

3. Re: Apanhando do fgetws [RESOLVIDO]

Nick Us
Nick-us

(usa Slackware)

Enviado em 14/03/2019 - 01:13h

paulo1205 escreveu:Esta linha está errada:
printf("%s", Texto2); 

Em vez de eu lhe explicar o erro, eu vou lhe dar a dica que eu sempre repito: ligue o máximo possível de opções de diagnóstico de código que o compilador permitir. Com o GCC, eu recomendo, no mínimo as opções “-Wall -Werror -O2 -pedantic-errors”.

Ahhhhhhhh puxa, eu realmente não sabia mesmo sobre o erro! Porém, já li explicações suas sobre o printf em especial o ls
Eu já anotei 3 textos inteiros seus sobre compilação com gcc, e são muito úteis, mas como compilo rapido (gcc test.c) me esqueço da grande ajuda das opções dele!

Eu jurava mesmo que era um problema do fgetws kkkkkkkkkk MUITO OBRIGADO mesmo! Pq me chamou a atenção para não esqueçer na hora de compilar!

Aviso mais do que claro do gcc sobre o erro, mas que eu esqueçi de pedir ajuda a ele antes!
Test3.c:24:13: warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘wchar_t *’ {aka ‘int *’} [-Wformat=]
printf("%s", Texto2); // Imprime apenas a letra M
~^ ~~~~~~
%ls

Corrigido:
printf("%ls", Texto2); 



4. Re: Apanhando do fgetws [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 14/03/2019 - 15:20h

É isso aí. Coloque o compilador para trabalhar por você.

Durante muito tempo, e hoje ainda, um dos argumentos contra C e C++ era a falta de ferramentas de auxílio ao programador, em comparação com outras linguagens. Hoje, esse gap vem diminuindo um pouco, e os próprios compiladores já podem fazer parte do trabalho. Então vamos aproveitar.


... “Principium sapientiae timor Domini, et scientia sanctorum prudentia.” (Proverbia 9:10)






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts