1answer.
Ask question
Login Signup
Ask question
All categories
  • English
  • Mathematics
  • Social Studies
  • Business
  • History
  • Health
  • Geography
  • Biology
  • Physics
  • Chemistry
  • Computers and Technology
  • Arts
  • World Languages
  • Spanish
  • French
  • German
  • Advanced Placement (AP)
  • SAT
  • Medicine
  • Law
  • Engineering
8090 [49]
3 years ago
5

Part 1: For this assignment, call it assign0 Implement the following library and driver program under assign0: Your library will

be consisting of myio.h and myio.c. The function prototypes as well as more explanations are listed in myio.h. Please download it and accordingly implement the exported functions in myio.c. Basically, you are asked to develop a simple I/O library which exports a few functions to simplify the reading of an integer, a double, and more importantly a string (whole line). In contrast to standard I/O functions that can read strings (e.g., scanf with "%s", fgets) into a given static size buffer, your function should read the given input line of characters terminated by a newline character into a dynamically allocated and resized buffer based on the length of the given input line. Also your functions should check for possible errors (e.g., not an integer, not a double, illigal input, no memory etc.) and appropriately handle them. Then write a driver program driver.c that can simply use the functions from myio library. Specifically, your driver program should get four command-line arguments: x y z output_filename. It then prompts/reads x many integers, y many doubles, and z many lines, and prints them into a file called output_filename.txt. Possible errors should be printed on stderr.
myio.h file

/*
* File: myio.h
* Version: 1.0
* -----------------------------------------------------
* This interface provides access to a basic library of
* functions that simplify the reading of input data.
*/

#ifndef _myio_h
#define _myio_h

/*
* Function: ReadInteger
* Usage: i = ReadInteger();
* ------------------------
* ReadInteger reads a line of text from standard input and scans
* it as an integer. The integer value is returned. If an
* integer cannot be scanned or if more characters follow the
* number, the user is given a chance to retry.
*/

int ReadInteger(void);

/*
* Function: ReadDouble
* Usage: x = ReadDouble();
* ---------------------
* ReadDouble reads a line of text from standard input and scans
* it as a double. If the number cannot be scanned or if extra
* characters follow after the number ends, the user is given
* a chance to reenter the value.
*/

double ReadDouble(void);

/*
* Function: ReadLine
* Usage: s = ReadLine();
* ---------------------
* ReadLine reads a line of text from standard input and returns
* the line as a string. The newline character that terminates
* the input is not stored as part of the string.
*/

char *ReadLine(void);

/*
* Function: ReadLine
* Usage: s = ReadLine(infile);
* ----------------------------
* ReadLineFile reads a line of text from the input file and
* returns the line as a string. The newline character
* that terminates the input is not stored as part of the
* string. The ReadLine function returns NULL if infile
* is at the end-of-file position. Actually, above ReadLine();
* can simply be implemented as return(ReadLineFile(stdin)); */

char *ReadLineFile(FILE *infile);

#endif
Computers and Technology
1 answer:
just olya [345]3 years ago
8 0

Answer:

Explanation:

PROGRAM

main.c

#include <fcntl.h>

#include <stdio.h>

#include <stdlib.h>

#include <sys/stat.h>

#include <sys/types.h>

#include <unistd.h>

#include "myio.h"

int checkInt(char *arg);

int main(int argc, char *argv[]) {

  int doubles, i, ints, lines;

  char newline;

  FILE *out;

  int x, y, z;

  newline = '\n';

  if (argc != 5) {

     printf("Usage is x y z output_filename\n");

     return 0;

  }

  if (checkInt(argv[1]) != 0)

     return 0;

  ints = atoi(argv[1]);

  if (checkInt(argv[2]) != 0)

     return 0;

  doubles = atoi(argv[2]);

  if (checkInt(argv[3]) != 0)

     return 0;

  lines = atoi(argv[3]);

  out = fopen(argv[4], "a");

  if (out == NULL) {

     perror("File could not be opened");

     return 0;

  }

  for (x = 0; x < ints; x++) {

     int n = ReadInteger();

     printf("%d\n", n);

     fprintf(out, "%d\n", n);

  }

  for (y = 0; y < doubles; y++) {

     double d = ReadDouble();

     printf("%lf\n", d);

     fprintf(out, "%lf\n", d);

  }

  for (z = 0; z < lines; z++) {

     char *l = ReadLine();

     printf("%s\n", l);

     fprintf(out, "%s\n", l);

     free(l);

  }

  fclose(out);

  return 0;

}

int checkInt(char *arg) {

  int x;

  x = 0;

  while (arg[x] != '\0') {

     if (arg[x] > '9' || arg[x] < '0') {

        printf("Improper input. x, y, and z must be ints.\n");

        return -1;

     }

     x++;

  }

  return 0;

}

myio.c

#include <limits.h>

#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>

char *ReadInput(int fd) {

  char buf[BUFSIZ];

  int i;

  char *input;

  int r, ret, x;

  i = 1;

  r = 0;

  ret = 1;

  input = calloc(BUFSIZ, sizeof(char));

  while (ret > 0) {

     ret = read(fd, &buf, BUFSIZ);

   

     for (x = 0; x < BUFSIZ; x++) {

        if (buf[x] == '\n' || buf[x] == EOF) {

           ret = -1;

           break;

        }

        input[x*i] = buf[x];

        r++;

     }

   

     i++;

   

     if (ret != -1)

        input = realloc(input, BUFSIZ*i);

  }

  if (r == 0)

     return NULL;

  input[r] = '\0';

  input = realloc(input, r+1);

  return(input);

}

int ReadInteger() {

  char *input;

  int go, num, x;

  go = 0;

  do {

     go = 0;

   

     printf("Input an integer\n");

     input = ReadInput(STDIN_FILENO);

     for (x = 0; x < INT_MAX; x++) {

        if (x == 0&& input[x] == '-')

           continue;

        if (input[x] == 0)

           break;

        else if (input[x]> '9' || input[x] < '0') {

           go = 1;

           printf("Improper input\n");

           break;

        }

    }

  } while (go == 1);

  num = atoi(input);

  free(input);

  return num;

}

double ReadDouble(void) {

  int dec, exp;

  char *input;

  int go;

  double num;

  int x;

  do {

     go = 0;

     dec = 0;

     exp = 0;

   

     printf("Input a double\n");

     input = ReadInput(STDIN_FILENO);

     for (x = 0; x < INT_MAX; x++) {

        if (x == 0&& input[x] == '-')

           continue;

        if (input[x] == 0)

           break;

        else if (input[x] == '.' && dec == 0)

           dec = 1;

        else if (x != 0&& (input[x] == 'e' || input[x] == 'E') && exp == 0) {

           dec = 1;

           exp = 1;

        }

        else if (input[x]> '9' || input[x] < '0') {

           go = 1;

           printf("Improper input\n");

           break;

        }

     }

  } while (go == 1);

  num = strtod(input, NULL);

  free(input);

  return num;

}

char *ReadLine(void) {

  printf("Input a line\n");

  return(ReadInput(STDIN_FILENO));

}

char *ReadLineFile(FILE *infile) {

  int fd;

  fd = fileno(infile);

  return(ReadInput(fd));

}

myio.h

#ifndef _myio_h

#define _myio_h

/*

* Function: ReadInteger

* Usage: i = ReadInteger();

* ------------------------

* ReadInteger reads a line of text from standard input and scans

* it as an integer. The integer value is returned. If an

* integer cannot be scanned or if more characters follow the

* number, the user is given a chance to retry.

*/

int ReadInteger(void);

/*

* Function: ReadDouble

* Usage: x = ReadDouble();

* ---------------------

* ReadDouble reads a line of text from standard input and scans

* it as a double. If the number cannot be scanned or if extra

* characters follow after the number ends, the user is given

* a chance to reenter the value.

*/

double ReadDouble(void);

/*

* Function: ReadLine

* Usage: s = ReadLine();

* ---------------------

* ReadLine reads a line of text from standard input and returns

* the line as a string. The newline character that terminates

* the input is not stored as part of the string.

*/

char *ReadLine(void);

/*

* Function: ReadLine

* Usage: s = ReadLine(infile);

* ----------------------------

* ReadLineFile reads a line of text from the input file and

* returns the line as a string. The newline character

* that terminates the input is not stored as part of the

* string. The ReadLine function returns NULL if infile

* is at the end-of-file position. Actually, above ReadLine();

* can simply be implemented as return(ReadLineFile(stdin)); */

char *ReadLineFile(FILE *infile);

You might be interested in
suppose you need to verify how to correctly use commas. you pen your English textbook and scan the chapter titles in which one w
Leviafan [203]
D- Proper punctuation
6 0
3 years ago
The answer for this question?
Debora [2.8K]
It will flow from 2 to 1
6 0
4 years ago
How does a light bulb work
koban [17]
A light bulb is usually powered by a wire producing electricity. The energy can also come from wind turbines or solar panels.

Hope this helps
7 0
4 years ago
Read 2 more answers
Write a code to load Shepp Logan phantoms and use the radon transform for parallel beam to generate a sinogram for 360 degree ro
jeyben [28]
他們也在週四在家休息時間接受媒體訪問時指出,他們
6 0
3 years ago
The convergence of information technology and operations technology, offering the potential for tremendous improvements in effic
11111nata11111 [884]

Answer:

<em>e. Industrial Internet of Things</em>

Explanation:

The industrial Internet of Things (IIoT) <em>is the use of intelligent detectors and actuators to improve manufacturing processes and production. </em>

IIoT utilizes the power of intelligent machines and real-time big data to take full advantage of data produced for years by "dumb" machines in industrial settings.

7 0
3 years ago
Other questions:
  • A ____ can interpret physical addressing information.
    11·1 answer
  • How do i start makeing a Character in the Unreal Game Engine
    14·2 answers
  • What is a benifit of having a client/server network?
    6·1 answer
  • You're trying to improve an ad's perceived quality so it performs better during an ad auction. What change would have the least-
    15·1 answer
  • You have been asked to write a program that will ask the user for his or her pizza order and display it. The order will include
    11·1 answer
  • What type of program would you use to create a personal budget?
    9·1 answer
  • 2. Suppose you want to write a method that prints a heading on a new output page, along with a page number that is 1 in the firs
    15·1 answer
  • 17. When an industrial electrical circuit requires a 220 VAC single phase power supply, the electric power supply circuit is nor
    7·1 answer
  • Suppose your name was George Gershwin. Write a complete main method that would print your last name, followed by a comma, follow
    9·1 answer
  • I need help about computer program. Solve C language code...... please​
    7·1 answer
Add answer
Login
Not registered? Fast signup
Signup
Login Signup
Ask question!