1

Este es el código que he intentado, pero al ejecutarlo solo me deja escribir el primer nombre, y en la parte de acomodar alfabéticamente me muestra un signo. En la "Parte 1" es la declaración de funciones, ya que en este programa se me pide usar funciones. En la "Parte 2" se declaran las variables y se pide la cantidad de nombres y definirlos. En la "Parte 3" se ordena alfabéticamente los nombres dados. Las librerías que use fueron: iostream , conio.h , stdlib.h , math.h

**Parte 1**
//declaracion de funciones
int EnteroPositivo();
**Parte 2**
int main()
{
    int i = 0;
    int j, n;
    int temp = 0;
    int A = 0;
    char nombre[50];
    do
    {
        system("cls");
        cout << "Ingrese cantidad de nombres: " << endl;
        n = EnteroPositivo();
    } while (n < 0);
    cout << "Ingrese nombres:" << endl;
    for (int i = 0; i < n; i++)
    {
        cout << "Nombre: " << i + 1 << endl;
        cin >> nombre[i];
    }
**Parte 3**
    for (int i = 0; i < n; i++);
    {
        for (j = i; j < n; j++);
        {
            if ((nombre[i] > nombre[j]) > 0)
            {
                temp = nombre[i];
                nombre[i] = nombre[j];
                nombre[j] = temp;
            }
        }
    }
    cout << endl << "Los nombre ordenados alfabéticamente son: " << endl;
    for (int i = 0; i < n; i++);
    {cout << nombre[i] << endl; }
    _getch;
    return 0;
}
**Funcion**
int EnteroPositivo()
{
    int num = 0;
    char dato = 0;
    char arreglo[10];
    int i = 0;
    do
    {
        dato = _getch();
        if (dato >= '0' && dato <= '9')
        {
            cout << dato;
            arreglo[i] = dato;
            i++;
        }
        if (dato == 8 && i > 0)
        {
            cout << dato; cout << " "; cout << dato;
            i--;
            arreglo[i] = 0;
        }
    } while (dato != 13);
    num = atoi(arreglo);
    return num;
}
Marian
  • 11
  • 1
  • Uno sería que al añadir los nombres con `cin >> nombre[i];`, estás intentando escribir toda una palabra en el espacio destinado a solo un carácter, debes definir `nombre` como un array bidimensional de caracteres i.e. algo como: `char nombre[50][LMAX];`, o lo más recomendable, ya que estás en [tag:C++] usar los encabezados `string` y `vector`. – 4lrdyD Apr 19 '20 at 23:47

1 Answers1

0

Tu código tiene numerosos y graves errores.

  1. Uso inadecuado de cabeceras (librerías): conio.h, stdlib.h y math.h son cabeceras del lenguaje que no deben ser usadas trabajando en lenguaje , lee este hilo para saber más del tema.
  2. Cabeceras con propósito solapado: La cabecera stdlib.h ofrece en lenguaje C herramientas para leer y escribir la consola de datos, es exactamente la misma misión que tiene la cabecera iostream de C++, por lo tanto sobra la primera (ver también punto 1).
  3. Los caracteres (char) guardan una letra, no una frase: La formación char nombre[50] son cincuenta caracteres, mientras que nombre[i] es un caràcter, concretamente el que está en la posición i.
  4. Los enteros (int) no son frases: La variable temp es un entero (int) no una frase, así que el intercambio de valores es incorrecto en la expresión temp = nombre[i].

En C++ se usa el objeto std::string para guardar datos de texto y una colección de datos como std::vector para guardar cantidades dinámicas de datos. Podrías crear tantos nombres como diga la entrada de consola así:

std::cout << "Ingrese cantidad de nombres: " << endl;
std::vector<std::string> nombre(EnteroPositivo());

Y podrías almacenarlos tal y como ya hacías:

for (int i = 0; i < n; i++)
{
    std::cout << "Nombre: " << i + 1 << std::endl;
    std::cin >> nombre[i];
}

Mientras que para intercambiarlos podrías usar std::swap (de la cabecera utility):

if ((nombre[i] > nombre[j]) > 0)
{
    std::swap(nombre[i], nombre[j]);
}
PaperBirdMaster
  • 44,474
  • 6
  • 44
  • 82