Tal y como ha dicho iBug quieres guardar dos libros, pero sólo tienes espacio para uno.
Si quieres más libros, necesitarás más espacio para libros, la solución propuesta por iBug es correcta y funcional (limitada un máximo de 10 libros), pero yo te aconsejo una solución más acorde con el lenguaje, en primer lugar señalaré tus fallos más evidentes:
- Las cabeceras
<stdlib.h>
y <stdio.h>
son de C, no de C++, si realmente necesitas usarlas (que no las necesitas) debes usar los equivalentes de C++: <cstdlib>
y <cstdio>
. Consulta esta pregunta para saber por qué.
- La manera de trabajar con cadenas de caracteres en C++ es usando objetos de tipo
std::string
(accesibles tras incluir la cabecera <string>
) no con formaciones1 de caracteres.
- La manera de trabajar con colecciones de tamaño arbitrario en C++ es usando contenedores de objetos, por ejemplo
std::list
(accesibles tras incluir la cabecera <list>
) no con formaciones1.
- No se aconseja el uso de
using namespace std;
en el ámbito global, si fuese necesario usarlo (no suele serlo) debe usarse en el ámbito más pequeño posible. Consulta este hilo para saber por qué.
- No suele ser necesario usar
std::endl
, es más eficiente usar un salto de línea explícito \n
, consulta este hilo para saber por qué.
- La función
main
, debe devolver un valor. Consulta este hilo para saber por qué.
- Favorece el pre-incremento frente al post-incremento.
Teniendo en cuenta todas estas correcciones tu código podría quedar así:
#include <iostream>
int main(){
using lista_libros = std::list<std::string>;
lista_libros libros;
int lib;
std::cout << "Cantidad de libros: ";
std::cin >> lib;
for (int i = 0; i < lib; ++i) {
std::cout << "Nombre del libro " << i + 1 << " :";
std::string libro;
std::cin >> libro;
libros.push_back(libro);
}
lib = 0;
for (const auto &libro : libros) {
std::cout << "Nombre del libro " << ++lib << " : " << libro << '\n';
}
return 0;
}
- También conocidas como arreglos o en inglés arrays.