Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - MAFUS

#301
Ya viene en el código. Pero falta controlar el error del archivo no abierto en las funciones auxiliares.
#302
Fíjate en el while. Por otra parte hay modificaciones menores para evitar buffer overflow.

#include <stdio.h>
#include <string.h>

void archivar(char *texto);
void limpiar(void);

int main() {
    FILE *archivo;
    char palabra[20];
    char modifica[20];
    char texto[20];

    limpiar();
    printf("Ingrese la palabra que va a cambiar en el fichero 'Texto': ");
    scanf("%19s", palabra);
    while(getchar()!='\n');
    printf("¿Por que palabra la va a cambiar?: ");
    scanf("%19s", modifica);
    while(getchar()!='\n');

    archivo = fopen("Texto.txt", "r+");

    if(!archivo) {
        printf("\nNO SE ENCONTRO EL ARCHIVO Texto.txt.\n\n");
    }
    else {
        fscanf(archivo, "%19s", texto);
        while(!feof(archivo)) {
            if(strcmp(texto, palabra)==0) {
                strcpy(texto, modifica);
            }
            archivar(texto);
            fscanf(archivo, "%19s", texto);
        }
        fclose(archivo);
    }
    printf("Pulse INTRO para salir...");
    getchar();
}

void archivar(char *texto) {
    FILE *archivo;
    archivo = fopen("Modificado.txt", "a");
    fprintf(archivo, "%s ", texto);
    fclose(archivo);
}

void limpiar(void) {
    FILE *archivo;
    archivo = fopen("Modificado.txt", "w+");
    fclose(archivo);
}
#303
Programación C/C++ / Re: Proyecto final C++
23 Agosto 2018, 21:27 PM
Hombre, es un proyecto final. Pasar de C a C++ debería ser lo más sencillo.

Por cierto: de nada.

P.D.: se quedó un error en el código de cuándo hacía comprobaciones. La primera versión que subí no cumple con las especificaciones del enunciado. Ya está arreglado.
#304
Programación C/C++ / Re: Proyecto final C++
23 Agosto 2018, 20:43 PM
No se hacen tareas.
Expón lo que tienes y te aclaramos dudas puntuales.
#305
Intento de leer/escribir en una zona de memoria que el S.O. no ha asignado a tu programa.
#306
En C no existeix públic: ni private: todo es público.
Las estructuras no tienen métodos, éstos son funciones de ámbito global que deberán tener como uno de sus argumentos un puntero a la estructura con la que van a interactuar.
Es normal que las funciones hagan referencia en su nombre al tipo de dato con que van a interactuar.

He hecho unos arreglillos para que se trabajen con los datos de la estructura. En tu código original no usabas los datos de la clase, sino unos floats globales y sólo usabas los métodos. De igual forma si se definen en orden oportuno las funciones en un único archivo no hace falta escribir los prototipos.

#include <stdio.h>

typedef struct {
    float numeroA;
    float numeroB;
    float numeroC;
} calificacion;

void calificacion_pedirnumeros(calificacion *cal) {
    printf("Escribe el primero numero : ");
    scanf("%f", &cal->numeroA);

    printf("Escribe el segundo numero: ");
    scanf("%f", &cal->numeroB);

    printf("Escribe el tercer numero: ");
    scanf("%f", &cal->numeroC);
}

float calificacion_operacion(calificacion *cal) {
return (cal->numeroA + cal->numeroB + cal->numeroC)/3;
}

void calificacion_mostrar(calificacion *cal) {
    printf("El promedio es: %f\n", calificacion_operacion(cal));
}

int main() {
    calificacion c1;
    calificacion_pedirnumeros(&c1);
    calificacion_mostrar(&c1);
}
#307
Programación C/C++ / Re: no lo entiendo
19 Agosto 2018, 14:23 PM
Cada vez que haces getchar debes introducir un carácter y por cada bucle tienes dos: uno en el argumento while y otro en su cuerpo.

En el argumento de while escribe: (caracter=getchar())!='\n'
quita toda la linea de getchar del cuerpo.
#308
Intentando resolver tu problema me he encontrado con que la solución es más sencilla, en Windows:
https://msdn.microsoft.com/es-es/library/windows/desktop/ms646301(v=vs.85).aspx

resultando el siguiente código  (no lo mires si quieres hacerlo tu mismo):



#include <stdio.h>
#include <windows.h>

int main() {
   for(unsigned i=0; !(GetKeyState(0x44)&0x80); ++i)
       printf("%i\n", i);
}
#309
En C no hay una entrada directa desde el teclado. Hay un buffer, algo así como un contenedor, que se va llenando a medida que se van pulsando teclas y el lenguaje cuándo captura las entradas del teclado lo que hace es sacar del buffer lo que se ha ido introduciendo en el mismo orden.

Por otra parte C es un lenguaje próximo a la máquina así que depende mucho de cómo funcione el hardware, en su defecto, de cómo lo gestione el sistema operativo.

De normal lo que hace el sistema operativo es si le han pedido algo desde el teclado y el buffer está vacío detendrá el programa hasta que alguien pulse una tecla, entonces entregará esa tecla pulsada, la mostrará por pantalla y continuará con la ejecución el programa. Pero este comportamiento se puede cambiar y eso es lo que muestran los dos enlaces que te he pasado: allí el programa seguirá corriendo aún haya petición y el buffer esté vacío. También, si se va llenando no existirá aviso sino que en el momento que se pida una tecla pulsada ésta se entregará si hay petición. Y de hecho esto es lo que buscas en tu programa.

Pero me quedo con lo que te ha dicho NEBIRE: sigue aprendiendo el lenguaje, quizás con programas más básicos que no requieran estos efectos. Una vez lo domines podrás escalar de nivel. Ya ves que C depende de en qué máquina te encuentres. Otros lenguajes son más portables porque todo el framework que los soporta los ha alejado mucho de la máquina, en cambio C es un lenguaje muy básico y su framework es básicamente el sistema entero.
#310
getch es  una forma de conseguir una tecla sin que se detenga el programa para que el usuario haga la entrada, es decir, si no se produce una pulsación el programa continua, y si se produce el programa continuará y getch te retornará que se ha pulsado. Además no producirá eco en la pantalla.

Implementación para windows:
https://helloacm.com/modern-getch-implementation-on-windows-cc/

Implementación para linux:
https://stackoverflow.com/questions/7469139/what-is-equivalent-to-getch-getche-in-linux