Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: 47anonimo74 en 7 Febrero 2014, 20:21 pm



Título: ¿por que no funciona? y como areglaro
Publicado por: 47anonimo74 en 7 Febrero 2014, 20:21 pm
Buenas estaba mirando unos ejerciocios y consigo que compile tras unas llaves pero no soy capaz de que me haga lo deseado:

Código:
#include <iostream.h>				// Usamos: ios, cin, cout
#include <iomanip.h> // Usamos: resetiosflags

void Leer_Cadena(char * s) {
  cin >> resetiosflags(ios::skipws); // Para que no pase los caracteres blancos.
  for (int i= 0; cin >> s[i]; i++){ // Leer caracteres hasta el caracter nulo.
    if (s[i] == '\n') break;{
  s[i]= '\0'; }} // Pone el caracter de fin de cadena.
}

int StrLen(char * s) {
  char * s0= s;
  while (*s++);
  return s - s0 - 1;
}

int main() {
  char s[100]; // Buffer de capacidad de hasta 99 caracteres y '\0'. Si metemos m s caracteres hay posibilidad de 'cuelgue'

  cout << endl << "Introduce una cadena (termina con CTRL-Z o INTRO)" << endl;
  Leer_Cadena(s);
  cout << endl << "La cadena es: " << s << endl;
  cout << "Y su longitud es: " << StrLen(s);
  system("pause");
}

a ver si alguien es capaz de hacerlo funcionar y decirme por que no me imprime lo deseado, quizas sea el compilaodr uso dev C++


Título: Re: ¿por que no funciona? y como areglaro
Publicado por: leosansan en 7 Febrero 2014, 20:49 pm

* Te fallan los nombres de las librerías, además te faltan un par de ellas.

* Te has hecho un lío con las llaves del for y el break.

* Te falta el return de main.

Una salida con las correcciones que te propongo:


Citar

Introduce una cadena (termina con CTRL-Z o INTRO)
leosansan 123 456 47anonimo74

La cadena es: leosansan 123 456 47anonimo74
Y su longitud es: 29
Presione una tecla para continuar . . .


Código
  1. #include <iostream> // Usamos: ios, cin, cout
  2. #include <iomanip> // Usamos: resetiosflags
  3. #include <cstdlib>
  4. #include <cstring>
  5. using namespace std;
  6.  
  7. void Leer_Cadena(char * s) {
  8.  int i;
  9.  cin >> resetiosflags(ios::skipws); // Para que no pase los caracteres blancos.
  10.  for ( i= 0; cin >> s[i]; i++){// Leer caracteres hasta el caracter nulo.
  11.    if (s[i] == '\n')
  12.      break;
  13.  }
  14.  s[i]= '\0'; // Pone el caracter de fin de cadena.
  15. }
  16.  
  17. int StrLen(char * s) {
  18.  char * s0= s;
  19.  while (*s++);
  20.  return s - s0 - 1;
  21. }
  22.  
  23. int main() {
  24.  char s[100]; // Buffer de capacidad de hasta 99 caracteres y '\0'. Si metemos m s caracteres hay posibilidad de 'cuelgue'
  25.  
  26.  cout << endl << "Introduce una cadena (termina con CTRL-Z o INTRO)" << endl;
  27.  Leer_Cadena(s);
  28.  cout << endl << "La cadena es: " << s << endl;
  29.  cout << "Y su longitud es: " << StrLen(s)<< endl;
  30.  system("pause");
  31. return 0;
  32. }
  33.  

¡¡¡¡ Saluditos! ..... !!!!


(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)


Título: Re: ¿por que no funciona? y como areglaro
Publicado por: 47anonimo74 en 9 Febrero 2014, 11:46 am
muchas gracias por tu respuesta, claro a mi me compilaba y confiado que que funcionaba, ahora ya se un poco, mas pero el return 0 por lo general yo no o uso sera que siempre acabo poniendo un exit(0); antes de llegar.


Título: Re: ¿por que no funciona? y como areglaro
Publicado por: rir3760 en 9 Febrero 2014, 15:55 pm
el return 0 por lo general yo no o uso sera que siempre acabo poniendo un exit(0); antes de llegar.
En la función main no es necesario utilizar una llamada a la función exit para terminar el programa ya que una sentencia "return N;" tiene el mismo efecto.

Un saludo