Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: S++ en 10 Junio 2015, 19:16 pm



Título: (Ayuda) Array de strings.
Publicado por: S++ en 10 Junio 2015, 19:16 pm
Hola, estoy empezando en la programación y quise ejecutar el siguiente código:

Citar
1. #include <iostream>
2. #include <stdlib.h>
3. #include <string>
4. using namespace std;
5. void main()
6. {
7.    bool apagado = false;
8.   int l = 1;
9.   int a = 1;
10.   int *A = &a;
11.   int *L = &l;
12.   string libros[l];
13.   string autores[a];
14.   string entrada;
15.   for (int *L = &l; apagado = false; *L++)
16.   {
17.      cout << "Ingrese un libro o ingrese " << "-1 " << "para finalizar el programa: ";
18.      getline(cin, entrada);
19.
20.      if (entrada == "-1")
21.      {
22.         apagado = true;
23.         break;
24.      }
25.      else
26.      {
27.         libros[*L] = entrada;
28.      }
29.
30.      cout << endl << "Ingrese un autor: ";
31.      string entradaAutor;
32.      getline(cin, entradaAutor);
33.      entradaAutor = autores[*A];
34.   }
35.   cout << endl << "Gracias por utilizar el programa." << endl << endl;
36.   system("pause");
37.
38.}

El problema es que me marca error en las lineas 12 y 13.
Qué debería modificar para poder ejecutar el programa sin errores?


Título: Re: (Ayuda) Array de strings.
Publicado por: ivancea96 en 10 Junio 2015, 20:34 pm
Cuando tengas un error, cópianoslo. Es más rápido.

A parte de ese error que comentas, que no sé qué podría ser, te comento algunas otras cosas:

Preferible que pongas int main, en vez de void main.

usas stdlib.h. Ya que estás usando C++, a las librerías .h estándar, basta que les quites el .h y les añadas una 'c' al inicio, para ser de C++. (cstdlib)

Ese for nunca va a hacer nada. La condición apagado=false es una asignación, estás asignándole a apagado el valor false. El operador para ver si ambas aprtes son iguales es ==, dos sígnos igual.

En ese for, estás accediendo a libros[*L], que es correcto. El problema es que el tamaño de libros[] es 1. Es un arreglo de 1 elemento. Cuando *L sea 2, puedes generar un error.


Título: Re: (Ayuda) Array de strings.
Publicado por: S++ en 10 Junio 2015, 21:42 pm
Hola, gracias por los consejos.
Cambié el código:
Código
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <string>
  4. using namespace std;
  5. int main()
  6. {
  7. int l = 1;
  8. int a = 1;
  9. int *L = &l;
  10. int *A = &a;
  11. string libros[l];
  12. string autores[a];
  13. string entrada;
  14. int almacenar;
  15. for (*L = 1;; *L++)
  16. {
  17. cout << "Ingrese un libro o ingrese " << "-1 " << "para finalizar el programa: ";
  18. getline(cin, entrada);
  19. if (entrada == "-1")
  20. {
  21. almacenar = l;
  22. break;
  23. }
  24. else
  25. {
  26. libros[l] = entrada;
  27. cout << endl << "Ingrese el autor del libro " << '"' << libros[l] << '"' << ": ";
  28. getline(cin, entrada);
  29. autores[a] = entrada;
  30. *A++;
  31. cout << endl;
  32. }
  33. }
  34. for (*L = 1; l < almacenar; *L++)
  35. {
  36. cout << "El libro numero " << *L << " es: " << libros[l] << "." << endl;
  37. cout << "Su autor es: " << autores[a] << "." << endl << endl;
  38. }
  39. system("pause");
  40. return 0;
  41. }
Acá está la lista de errores:
Error   1   error C2057: expected constant expression
Error   4   error C2057: expected constant expression
Error   6   error C2133: 'autores' : unknown size
Error   3   error C2133: 'libros' : unknown size
Error   2   error C2466: cannot allocate an array of constant size 0
Error   5   error C2466: cannot allocate an array of constant size 0
   7   IntelliSense: expression must have a constant value
   8   IntelliSense: expression must have a constant value

Por lo que entiendo, el problema es que en la linea 11 y 12, los valores de lo que está entre corchetes no son valores constantes, pero esa es la idea; que el usuario pueda agregar la cantidad de información que quiera y este mismo establezca un limite.


Título: Re: (Ayuda) Array de strings.
Publicado por: engel lex en 10 Junio 2015, 21:48 pm
deben ser constantes si lo declaras de esa forma, si no, debes usar "new"

Código
  1. string *L= new string[l];


Título: Re: (Ayuda) Array de strings.
Publicado por: rir3760 en 11 Junio 2015, 03:59 am
Otro error se encuentra en los indices para acceder a los arrays (si estos para empezar fueran los correctos) ya que en C y C++ el primer elemento de un array tiene el indice 0 y el ultimo N-1.

Parece ser un ejercicio para practicar con punteros ya que las variables "L" y "A" apuntan a "l" y "a" pero si el objetivo es incrementar estas ultimas (eso sugiere el ultimo bucle) el incremento esta mal ya que, por ejemplo:
Código
  1. *L++
Debido a la prioridad de los operadores se evaluá así:
Código
  1. *(L++)
Con ello el resultado de la expresión se descarta y se incrementa la dirección en memoria (el puntero).

Lo mejor por sencillo es rescribir el programa utilizando las clases vector y string.

Un saludo