[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

[Ultra OT]Sobre un programa en C



Saludos lista, lo primero disculpas por enviar este pedazo de Off-topic, pero es que ahora mismo no puedo preguntar en otro sitio y este problema es de una cierta urgencia. Resulta que para un curso de C que estoy haciendo tengo que hacer un programa que "compruebe caracteres no válidos en los archivos de texto. Los únicos caracteres válidos son los códigos ASCII 10, 13 y 32 .. 126.". El programa lo he podido hacer sin problemas, pero (ya me lo temía) al leer un carácter no-ASCII (una ñ o una vocal con tilde, por ejemplo), toma el siguiente también como no válido y me fastidia el programa. He probado a poner combinaciones de break y continue en los if anidados, pero eso está claro que no funciona. Si alguien pudiera ayudarme se lo agradecería mucho.

Este es el programa:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
  if (argc < 2)
  {
fputs("Error: se ha de pasar el archivo a leer como parámetro.", stderr);
	  exit(EXIT_FAILURE);
  }
  char *nombre = argv[1], c;
  FILE *fichero = fopen(nombre, "r");
  int value = 0;
  if (fichero == NULL)
  {
	  fprintf(stderr, "Error al abrir el archivo %s:\n", nombre);
	  perror("Error");
	  exit(EXIT_FAILURE);
  }
  puts("Fichero abierto con éxito.");
  while ((c = getc(fichero)) != EOF)
    {
      if (c < 32 || c > 126)
	{
	  if (c != 10 && c != 13)
	    {
printf("Error: carácter no-ASCII detectado. Posición en el fichero: %ld.\n", ftell(fichero));
	  value = 1;
	 	}
		}
    }
  if (value == 0)
    printf("Todos los caracteres leídos eran correctos.\n");
  if (fclose(fichero) == EOF)
  {
	  fprintf(stderr, "Error al cerrar el archivo %s:\n", nombre);
	  perror("Error");
	  exit(EXIT_FAILURE);
  }
  puts("Fichero cerrado con éxito.");
  return 0;
}

Saludos,

--
Lucas.
Linux Registered User #546773
--
Por favor, no envíes adjuntos en formato Word:
http://www.gnu.org/philosophy/no-word-attachments.es.html


Reply to: