Autor
|
Tema: ayuda con detallitos en mi programa (OJO paciencia, soy novato) (Leído 2,958 veces)
|
harofenix
Desconectado
Mensajes: 3
|
tengo un detalle con este programita al elegir la opcion b) en la impresion de las traspuesta del arreglo bidimensional me imprime valores basura (en lo que vienen siendo las 2 ultimas filas de la traspuesta del arreglo bid.) no logro saber a que se debe. inclusibe pueden notar que en la linea de la insersion de valores al arreglo antes del scanf("%d", &array[f][c]); Uso la funcino flush_input(); para limpiar el buffer /*fflush por alguna razon no hace su trabajo*/ esta funcion la estructure de la siguiente manera: flush_input { int variable_entera; while ( (variable_entera = getchar()) != '\n' && variable_entera != EOF) ; }
#include <stdio.h> #include <string.h>
char Menu(void); void flush_input(void); int EvaluacionDeEleccion(char m); void OperandoLaOpcion(int eleccion); void CreacionEimpresionDeArregloUnidimensional(int size); void CreacionEimpresionDeArregloBidimensional(int filas, int columnas); int ConteoDeCadenaDeCaracteres(char *palabra);
int main(int argc, char **argv) { int eleccion; char m; printf("Hola usuario Bievenido a tu programa OPCIONES "); m = Menu(); eleccion = EvaluacionDeEleccion(m); OperandoLaOpcion(eleccion); return 0; }
void flush_input(void) { int ch; while( (ch = getchar()) != '\n' && ch != EOF) ; }
char Menu(void) { char option; printf(" \n a) creacion e impresion de un ciclo unidimiencional \n b) creacion e impresion de un ciclo bidimensional \n c) conteo de caracteres de una frase \n\n "); scanf("%c", &option); return option;; } int EvaluacionDeEleccion( char m) { if( m == 'a' || m == 'A' ) return 1; else if( m == 'b' || m == 'B' ) return 2; else if ( m == 'c' || m == 'C' ) return 3; else printf("OPCION NO VALIDA ! "); return 0; } void OperandoLaOpcion(int eleccion) { int size; int filas, columnas; char palabra[256]; int CaracteresContados; switch(eleccion) { case 1: printf(" Ingrese el tamano de su arreglo unidimensional: \n"); scanf("%d", &size); CreacionEimpresionDeArregloUnidimensional(size); break; case 2: printf("Ingresa las filas : \n"); flush_input(); scanf("%d",&filas); printf("Ingresa las columnas: \n"); flush_input(); scanf("%d", &columnas); CreacionEimpresionDeArregloBidimensional(filas, columnas); break; case 3: puts("ingresa una cadena de caracteres cualquiera: "); flush_input(); scanf("%s", &palabra); CaracteresContados = ConteoDeCadenaDeCaracteres(palabra); printf("tu palabra contiene %d caracteres ", CaracteresContados); break; } } void CreacionEimpresionDeArregloUnidimensional(int size) { int array[size]; int f; /*solicitud de valores al usuario para la creacion del arreglo unidimensional*/ for( f = 0; f < size; f ++ ) { printf("ingrese el valor deseado para la posicion [%d]: ", f); flush_input(); scanf("%d", &array[f]); }
/*impresion del array de manera normal*/ for( f = 0; f < size; f ++ ) { printf("%d \n", array[f]); } printf("\n"); /*impresion del array al rrevez */ for( f = size-1; f != -1; f-- ) /*nota: sin el menos uno me imprimia un valor basura*/ { printf("%d \n", array[f]); } } void CreacionEimpresionDeArregloBidimensional(int filas, int columnas) { int array[filas][columnas]; int f, c; /*solicitud de valores al usuario para formar el arreglo*/ for( f = 0; f < filas; f++ ) { for( c = 0; c < columnas; c++ ) { printf("ingrese el valor par la posicion [%d][%d]: ", f, c); flush_input(); scanf("%d", &array[f][c]); } } /*impresion normal del arreglo bidimensional*/ for( f = 0; f < filas; f++ ) { for( c = 0; c < columnas; c++ ) { printf("%d \t", array[f][c] ); } printf("\n"); } /*impresion de transpuesta del arreglo */ printf("\n\n"); for( c = 0; c < columnas; c++ ) { for( f = 0; f < filas; f++ ) { printf("%d \t", array[c][f] ); } printf("\n"); } } int ConteoDeCadenaDeCaracteres(char *palabra) { return strlen(palabra); }
|
|
|
En línea
|
|
|
|
SrCooper
Desconectado
Mensajes: 137
Bazinga!
|
for( c = 0; c < columnas; c++ ) { for( f = 0; f < filas; f++ ) { printf("%d \t", array [f ][c ] ); //Aqui está el error. } }
Estás accediendo al array con los índices al revés en el último bucle for. Puede que se trate de eso. En cuanto a lo de flush_input(), me remito a la pregunta de este usuario en stack overflow: http://stackoverflow.com/questions/7898215/how-to-clear-input-buffer-in-c. Y por cierto, es recomendable no utilizar la función scanf() y en su lugar usar fgets(). Un saludo y feliz navidad
|
|
« Última modificación: 25 Diciembre 2014, 19:27 pm por SrCooper »
|
En línea
|
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
Otro problema en el programa es la declaración de los arrays indicando su numero de elementos mediante los valores pasados a la función, por ejemplo en la función "CreacionEimpresionDeArregloBidimensional" (por cierto un nombre largo no es necesariamente claro, trata de utilizar nombres descriptivos pero razonablemente cortos): void CreacionEimpresionDeArregloBidimensional(int filas, int columnas) { int array[filas][columnas]; /* ... */
A ese tipo de arrays se les conoce como arrays de longitud variable y solo se garantizan en el estándar C99 (en C90 no existen y en C11 son opcionales), la solución aquí es revisar la documentación del compilador o bien utilizar las funciones para la reserva dinámica de memoria (malloc, calloc y realloc). En cuanto al uso de scanf vs fgets+sscanf en programas como este no hay diferencia (si se requiere una validación completamente a prueba de fallos scanf y familia no bastan, se debe utilizar fgets + strtol/strtoul/strtod). Un saludo
|
|
|
En línea
|
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
|
|
|
harofenix
Desconectado
Mensajes: 3
|
abro mi cabecera stdio.h (codelite) esto me dice q el compilador trabaja dentro de el estandar C99, sin embargo tendre que estudiar mas, gracias por el apoyo! ahorita estoy con el libro de como programar en c/ c++ (deitel && deitel) 2da edicion me parece bastante completo. inclusibe pienso adquirir un tomo! saludos. ! /* Define ISO C stdio on top of C++ iostreams. Copyright (C) 1991, 1994-2008, 2009, 2010 Free Software Foundation, Inc. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */
/* * ISO C99 Standard: 7.19 Input/output <stdio.h> */
|
|
|
En línea
|
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
Si estas utilizando un IDE (en tu caso Code Lite) debes buscar en el donde indicar directamente el estándar a utilizar o por lo menos la forma que permita pasarle a gcc (el compilador) la opción (mediante linea de comandos) indicando el estándar a utilizar. Las opciones de linea de comandos de gcc se describen (en ingles) en la pagina 3.4 Options Controlling C Dialect. Un saludo
|
|
|
En línea
|
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
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Novato pide ayuda con un programa porfavor
Java
|
pitbull31416
|
6
|
5,869
|
11 Octubre 2009, 09:05 am
por pitbull31416
|
|
|
[BATCH] Novato ayuda con programa .bat[Solucionado]
Scripting
|
Iridiel
|
7
|
4,931
|
13 Enero 2011, 20:19 pm
por Iridiel
|
|
|
AYUDA con un programa en python soy muy novato!!!
Scripting
|
d0menek0r
|
2
|
2,482
|
5 Febrero 2012, 17:09 pm
por d0menek0r
|
|
|
Novato ayuda con programa sencillo en java
Java
|
luismi_12
|
4
|
2,164
|
12 Febrero 2013, 15:08 pm
por chocola
|
|
|
Ayuda de novato en un programa en Java con JSF
Java
|
theluigy13etv
|
0
|
1,797
|
16 Agosto 2015, 07:55 am
por theluigy13etv
|
|