Hola!
Estoy haciendo un programa modular y tengo dudas sobre si tengo que pasar una cadena por referencia o no.
Yo llamo a la función desde un menú
case 1:
system("cls");
printf("La frase introducida es %s", introducirFrase());
getch();
break;
Y la función es la siguiente:
int introducirFrase(){
char cadena[255]="";
printf("Frase: ");
gets(cadena);
return cadena;
}
Al compilar y probar no deja escribir nada, me salta el menú principal.
Agradezco la ayuda :P
Hola, mh... no es referencia el problema tuyo en el codigo que tienes. Pero si, pasar por referencia es lo que buscar.
printf("La frase introducida es %s", introducirFrase());
int introducirFrase(){
introducirFrase no retorna un char*.
char cadena[255]="";
printf("Frase: ");
gets(cadena);
return cadena;
char cadena[255] es una variable local. Desaparece al terminar la funcion.
return debe devolver int en tu caso.
Algo asi te deberia de servir:
void LeerCadena(char* cadena_){
gets(cadena_);
}
int main(int argc, char *argv[]) {
char cadena[255];
LeerCadena(cadena); // $cadena[0] == cadena
printf("%s", cadena);
Saludos.
Ademas de lo indicado por _Enko (retornar en base a la variable local "cadena" debe ser el error principal) deberías evitar el uso de llamadas a system, gets y el uso de la biblioteca conio de Borland, mas información en la pagina |Lo que no hay que hacer en C/C++. Nivel basico| (http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html).
Y si envías un texto a la salida estándar con:
printf("Frase: ");
La cadena debe terminar con el carácter de avance de linea (para ello lo mas sencillo es utilizar puts en lugar de printf) o bien vacías explícitamente el bufer de la salida estándar con fflush(stdout).
Un saludo
Buenas compañeros,
Sigo teniendo problemas a la hora de leer Strings, si leo caracteres no tengo problema pero como quiera escribir un Strings con una frase con espacios me da el siguiente error:
(http://i59.tinypic.com/28rmy2x.png)
No me permite escribir nada en el String
printf("Introduce el String: ");
gets(frase);
printf("\nLa frase sin la primera palabra: %s\n", quitarPrimera(frase));
system("pause");
char* quitarPrimera(char frase[20]);
int main(){
char frase[20];
Creo que será que tengo que recoger de otra forma la cadena porque con un SCANF puedo pero no me permite coger frases con espacios y no es el objetivo que estoy buscando.
Gracias!!!
Cita de: sora_ori en 16 Febrero 2015, 19:54 PMCreo que será que tengo que recoger de otra forma la cadena porque con un SCANF puedo pero no me permite coger frases con espacios y no es el objetivo que estoy buscando.
Con la información que muestras no es posible ayudarte, por favor publica el código fuente
completo.
Un saludo
Buenas,
Ya he podido solventar el problema de leer un String, ahora tengo problemas al pasar por referencia, dejo el código:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int frecuencia(char *, char letra);
int main(){
int opcion=1;
char frase[20], letra;
while(opcion!=5){
system("cls");
printf("1. Introducir frase\n");
printf("2. Frecuencia caracter\n");
printf("3. Quitar primera palabra\n");
printf("4. Sin espacios en blanco\n");
printf("5. Salir\n");
printf("\n\nEscoge una opcion: ");
fflush(stdin);
scanf("%i", &opcion);
switch (opcion){
case 1:
system("cls");
printf("Introduce una frase ");
fflush(stdin);
gets(frase); // Guardamos el String
printf("\n\nLa frase introducida es:\n\n\n");
printf("%s", frase);
fflush(stdin);
getch();
break;
case 2:
system("cls");
printf("\n\nQue letra quieres buscar en la cadena? ");
scanf("%c", &letra); // guardamos la letra que queremos buscar en la cadena
printf("La letra %c aparece %i veces repetidas", letra, frecuencia(frase,letra));
getch();
break;
case 3:
system("cls");
//printf("\nLa frase sin la primera palabra: %s\n", quitarPrimera(frase));
system("pause");
break;
case 4:
system("cls");
//printf("\nLa frase sin espacio es: %s\n", sinEspacios(frase));
break;
case 5:
system("cls");
printf("Hasta luego!");
getch();
return 0;
break;
default:
printf("\nOpcion incorrecta! Intenta de nuevo");
}
getch();
}
getch();
return 0;
}// fin main
// Función para comprobar cuantas veces se repite una letra
int frecuencia(char *frase[20], char letra){
int i, cont=0; // la variable contador será la encargada de sumar cuando se encuentre la letra
for (i=0; frase[i] != '\0'; i++){ // recorremos con un for hasta encontrar el espacio en blanco
if (frase[i] == letra){ // si el punto de la cadena es = a la letra que queremos encontrar
cont++; // sumara el contador
}
}
return cont; // retornaremos las veces que se ha encontrado el caracter que hemos buscado en el for
}
Al leer un String y pasarlo por referencia se pone " & " delante de la variable pero me da error.
Gracias
Si te das cuenta, en el prototipo de tu función declaraste como char *. De la misma forma debes hacerlo en la implementación.
Cambia esto que está así:
int frecuencia(char *frase[20], char letra)
Por esto:
int frecuencia(char *frase, char letra)
Ya lo he podido solucionar TODO!
Gracias por la ayuda compañeros!! :)
Saludos