Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

scanf e gets

Boa noite, estou fazendo um laço usando while, para receber dados do console e imprimi-los, coisa básica.

Quando a entrada tem apenas uma palavra, imprime tudo certo, mas quando tem mais de uma palavra, separada por espaços, elas são impressas em cada interação do loop(em linhas diferentes), isso quando eu uso o scanf.

Quando uso o gets, ele imprime tudo em uma única linha, como eu desejo, mais aí surge outro problema, ele não imprime caracteres UNICODE.

Alguém poderia me ajudar por favor?

Estou usando Visual C++ para codificar em c, sei que tem opções em c++, mas gostaria de uma solução usando apenas c.

segue o código:


 #include "stdafx.h"
#include <Windows.h>
#include <stdlib.h>
#include <stdio.h>
#include <wchar.h>

int main()
{
    while (1) 
    {
        SetConsoleOutputCP(65001);
        char msg[200];
        printf_s("digite uma mensagem: ");
        gets_s(msg, sizeof(msg));
        printf_s("\nmensagem: %s\n", msg);

    }
    return 0;
}
1 resposta
solução!

Olá Gilmar,

você pode usar o scanf para ler a linha inteira, apenas precisa utilizar um especificador diferente do %s pois ele lê apenas até o primeiro caracter de espaço. O identificador correto seria %[^\n], ou seja, leia qualquer coisa que não seja uma quebra de linha.

Assim, o código do scanf seria (já inserindo um espaço antes para evitar um loop infinito) : scanf(" %[^\n]",msg);

Aqui no meu computador, isso já funciona com caracteres unicode, provavelmente devido às flags de compilação do próprio compilador. No seu caso, se não funcionar, adicione a biblioteca #include<locale.h> e a linha setlocale(LC_ALL, ""); antes de entrar no while

Se continuar não funcionando, posta aqui o quê aconteceu!

Abraços!

Referências: http://linguagemc.com.br/localizacao-de-programas-com-locale-h/

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software