C/File/File Error

Материал из C\C++ эксперт
Версия от 10:22, 25 мая 2010; Admin (обсуждение | вклад) (1 версия: Импорт контента...)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Substitutes spaces for tabs in a text file and supplies error checking

/*
C: The Complete Reference, 4th Ed. (Paperback)
by Herbert Schildt
ISBN: 0072121246
Publisher: McGraw-Hill Osborne Media; 4 edition (April 26, 2000)
*/

#include <stdio.h>
#include <stdlib.h>
#define TAB_SIZE 8
#define IN 0
#define OUT 1
void err(int e);
int main(int argc, char *argv[])
{
  FILE *in, *out;
  int tab, i;
  char ch;
  if(argc!=3) {
    printf("usage: detab <in> <out>\n");
    exit(1);
  }
  if((in = fopen(argv[1], "rb"))==NULL) {
    printf("Cannot open %s.\n", argv[1]);
    exit(1);
  }
  if((out = fopen(argv[2], "wb"))==NULL) {
    printf("Cannot open %s.\n", argv[1]);
    exit(1);
  }
  tab = 0;
  do {
    ch = getc(in);
    if(ferror(in)) err(IN);
    /* if tab found, output appropriate number of spaces */
    if(ch=="\t") {
      for(i=tab; i<8; i++) {
        putc(" ", out);
        if(ferror(out)) err(OUT);
      }
      tab = 0;
    }
    else {
      putc(ch, out);
      if(ferror(out)) err(OUT);
      tab++;
      if(tab==TAB_SIZE) tab = 0;
      if(ch=="\n" || ch=="\r") tab = 0;
    }
  } while(!feof(in));
  fclose(in);
  fclose(out);
  return 0;
}
void err(int e)
{
  if(e==IN) printf("Error on input.\n");
  else printf("Error on output.\n");
  exit(1);
}