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]
4 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]4 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
You have read about the beginnings of the Internet and how it was created. What was the Internet originally created to do? (sele
svlad2 [7]
Communicate and share documents.
8 0
4 years ago
Read 2 more answers
What is the relationship between the binary number system and computer hardware?
lesya692 [45]

Answer: is the method of representing numbers that count by using combinations of only two numerals.

Explanation:

5 0
3 years ago
Shouldn't I be virtuoso? I keep refreshing and opening and closing tabs but it still hasn't updated
spin [16.1K]

Answer:

You are currently showing as a Virtuoso on your profile. Try clearing your cookies and logging back in.

5 0
2 years ago
You would like to search for information about storms but not tornadoes. What type of search strategy may be useful?
Norma-Jean [14]

Answer:

boolean search

Explanation:

4 0
3 years ago
Read 2 more answers
4. Write a program which selects two integer numbers randomly, adds the numbers and asks the user to enter the answer and then c
KIM [24]

Answer:

import random

number1 = random.randrange(0, 1000)

number2 = random.randrange(0, 1000)

answer = int(input("Enter a number: "))

if answer == number1 + number2:

   print("Your answer is correct")

else:

   print("Your answer is not correct")

Explanation:

The code is in Python

Create two integer numbers using random

Ask the user for an input

Check if answer is equal to number1 + number2. If they are equal, print "answer is correct". Otherwise, print "answer is not correct".

7 0
3 years ago
Other questions:
  • Sizing handles are used in Microsoft® Word® to _____.
    13·1 answer
  • Given two ArrayLists of sorted strings (alphabetically ascending), write down a method to merge these sorted strings’ ArrayLists
    10·1 answer
  • Create a view named ItemOrder view. It consists of the TaskID, description, price, order number, order date, and quoted price fo
    8·1 answer
  • my I phone is in recovery mode and when I connect to my PC the I device is not connected to iTunes although i have the latest ve
    7·2 answers
  • Encapsulation is a form of information hiding and an important characteristic of object-oriented programming. When a programmer
    6·1 answer
  • Libby’s keyboard is not working properly, but she wants to select options and commands from the screen itself. Which peripheral
    14·1 answer
  • Please help me!!!!!!!!
    5·2 answers
  • What determines the number of times that a condition-controlled loop will repeat?
    9·2 answers
  • Select all the correct answers.
    8·1 answer
  • You're on the lead generation team at a wine reseller called Partners in Wine. You've noticed that the user open rate of your em
    10·1 answer
Add answer
Login
Not registered? Fast signup
Signup
Login Signup
Ask question!