es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

C++ printf(“%s”, string) me está dando una salida muy extraña.

Estoy intentando usar printf para dar color a mis cadenas de texto con algo como:

printf("\x1B[92m%d\033[0m", valor1);

lo cual funciona correctamente para enteros, pero cuando intento hacer algo como:

printf("\x1B[92m%s\033[0m", cadenaDeseada);

me aparecen cosas aleatorias como (°√, ¿alguna ayuda por favor?

Aquí está la función completa:

void buscarEnArchivoPor(const path& archivos, string cadenaDeseada) {

    ifstream inFile;
    string cadenaActual;
    int numeroLinea = 0;
    bool nadaEncontrado = true;

    for (const auto& archivo : recursive_directory_iterator(archivos)) {
        numeroLinea = 0; // Reiniciar después de cada nuevo archivo
        inFile.open(archivo);
        while (inFile >> cadenaActual) {
            numeroLinea++;
            if (cadenaActual.find(cadenaDeseada) != string::npos) {
                cout << archivo << " " << cadenaDeseada << " " << numeroLinea << '\n';
                nadaEncontrado = false;
            }
            //cout << archivo << " " << cadenaActual << endl;
        }
        inFile.close();
    }
    if (nadaEncontrado == true) {
        cout << "No pudimos encontrar: " << cadenaDeseada;
        printf("\x1B[92m%s\033[0m", cadenaDeseada);
    }
    //cout << "Cadena deseada: " << cadenaDeseada;
}

Recuerda que necesitarás incluir las bibliotecas y declarar las variables necesarias antes de usar esta función.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema que estás teniendo está relacionado con el especificador de formato en tu declaración printf para la cadena de caracteres. En lugar de usar %d para los enteros, debes usar %s para las cadenas de caracteres.

    Sin embargo, debido a que la cadena de caracteres probablemente contiene caracteres especiales, necesitas usar la secuencia de escape correcta para los colores. Aquí tienes un ejemplo:

    printf("\033[0;32m%s\033[0m", wantedString.c_str());
    

    Esto imprimirá la variable wantedString en verde. La secuencia de escape \033[0;32m establece el color en verde y \033[0m lo restablece a normal. Ten en cuenta que también necesitas usar wantedString.c_str() para pasar una cadena de caracteres en estilo C a printf, ya que espera un const char* y no un std::string.

    ¡Espero que esto te sea de ayuda!

Comments are closed.