¿Me pueden ayudar con este programa?

Iniciado por ivorybom, 2 Diciembre 2012, 13:37 PM

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

ivorybom

Hola. Estoy empezando a programar y me he trabado con un ejercicio. Les adjunto el enunciado y lo que yo he hecho y a ver si me pueden ayudar.

Escribir un programa que lea valores enteros introducidos por
teclado y almacene en un fichero sólo aquellos valores comprendidos en el
intervalo [-15, 15]. La introducción de números acabará al teclear 999.


Este es el enunciado. Y aquí va lo que yo he hecho:
#include<stdio.h>

int main(void){
   
    FILE *fileOut;
    int t;
    fileOut = fopen("ejer2.txt","w");
    if (fileOut != NULL){
        printf("Introduzca un valor. Introduzca 999 para terminar.\n");
        scanf("&d",&t);
        for(t=-15;t<=15;t++){
            if(t != 999){
                fprintf(fileOut,"%d ",t);
                printf("Introduzca un valor. Introduzca 999 para terminar.\n");
                scanf("%d",&t);               
            }
       
        }
       
    }
    system("PAUSE");
}


Es un programa de ficheros y no me funciona bien. Al ejecutar se me cierra la ventana si pongo un numero mayo que 15.

Les agradecería la ayuda.

P.D.: Antes de que algunos se quejen les digo que esto no es un problema de clase. Lo he encontrado en un libro y me he propuesto hacerlo. Se los digo porque he visto quejas de estas por el foro.

rir3760

Si no tienes un libro de calidad te conviene conseguir uno, puedes revisar las recomendaciones utilizando el motor de búsqueda de los foros.

Los errores se deben a que esta muy mal estructurado el programa, en seudocodigo debería ser:
Repetir:
   Leer un numero
   Si esta en el intervalo [-15, 15] imprimirlo
Mientras el numero no sea 999


Si eso lo pasamos a lenguaje C el bucle de tu programa con las correcciones es:
do {
   puts("Introduce un valor (999 para terminar):");
   scanf("%d", &t);
   
   if (t >= -15 && t <= 15)
      fprintf(fileOut, "%d ", t);
}while (t != 999);


Otro error es (en tu programa original):
scanf("&d",&t);
Donde el carácter '&' debe sustituirse por '%'.

De nuevo consigue un libro y, para facilitar la detección de errores, compila en el modo mas estricto posible (como hacerlo debe indicarse en su documentación).

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

ivorybom

Perdón por no contestar antes. Muchas gracias por tus recomendaciones. Intentaré solucionarlo como tu dices. Muchas gracias de nuevo.