¿por que no funciona? y como areglaro

Iniciado por 47anonimo74, 7 Febrero 2014, 20:21 PM

0 Miembros y 1 Visitante están viendo este tema.

47anonimo74

Buenas estaba mirando unos ejerciocios y consigo que compile tras unas llaves pero no soy capaz de que me haga lo deseado:

#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++

leosansan


* 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 (cpp) [Seleccionar]

#include <iostream> // Usamos: ios, cin, cout
#include <iomanip> // Usamos: resetiosflags
#include <cstdlib>
#include <cstring>
using namespace std;

void Leer_Cadena(char * s) {
  int i;
  cin >> resetiosflags(ios::skipws); // Para que no pase los caracteres blancos.
  for ( 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)<< endl;
  system("pause");
return 0;
}


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



47anonimo74

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.

rir3760

Cita de: 47anonimo74 en  9 Febrero 2014, 11:46 AMel 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
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language