Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

My code is not working. #include #include #include bmp.h int main (int argc, char * argv[]); if (argc not_eq 3) { printf(Usage: ./whodunit infile outfile

My code is not working.

#include #include #include "bmp.h"

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

if (argc not_eq 3) { printf("Usage: ./whodunit infile outfile "); return 1; }

char* infile = argv[1]; char* outfile = argv[2];

FILE* inptr = fopen(infile, "r"); if (inptr == (void *)0

{ printf("dosen't open %s. ", infile); return 2; }

FILE* outptr = fopen(outfile, "w"); if (outptr ==(void *)0 { fclose(inptr); fclose(stderr, "Couldn't make %s ", outfile); return 3; }

BITMAPFILEHEADER bf; fread(&bf, sizeof(BITMAPFILEHEADER), 1, inptr);

BITMAPINFOHEADER bi; fread(&bi, sizeof(BITMAPINFOHEADER), 1, inptr);

if (bf.bfType not_eq 0x4d42 or bf.bfOffBits not_eq 54 or bi.bisize not_eq 40 or bi.biBitCount not_eq 24 or bi.bicompression not_eq 0)

{ fclose(outptr); fclose(inptr); fprintf(stderr, "Not supported file format. "); return 4;

fwrite(&bf, sizeof(BITMAPFILEHEADER), 1, outptr); fwrite(&bi, sizeof(BITMAPINFOHEADER), 1, outptr);

int padding = (4 - (bi.biWidth * sizeof(RGBTRIPLE)) % 4) % 4;

for (int i = 0, biHeight = abs(bi.biHeight); i < biHeight; i ++

for (int j = 0; j < bi.biWidth; j++)

RGBTRIPLE triple;

fread(&triple, sizeof(RGBTRIPLE), i, inptr);

if (triple.rgbtBlue == 0x00 and triple.rgbtGreen == 0x00 and triple.rgbt == 0xff) triple.rgbtBlue = 0xff; triple.rgbtGreen = 0xff; triple.rgbtRed = 0xff; }

fwrite(&triple, sizeof(RGBTRIPLE), i, outptr); }

fseek(inptr, padding, SEEK_CUR);

for (int k = 0; k < padding; k++)

{ fputc(0x00, outptr); }

}

fclose(inptr);

fclose(outptr);

return 0;

Implement a program called whodunit that reveals Mr. Boddys drawing in such a way that you can recognize whodunit.

Implement your program in a file called whodunit.c in a directory called whodunit.

Your program should accept exactly two command-line arguments: the name of an input file to open for reading followed by the name of an output file to open for writing.

If your program is executed with fewer or more than two command-line arguments, it should remind the user of correct usage, as with fprintf (to stderr), and main should return 1.

If the input file cannot be opened for reading, your program should inform the user as much, as with fprintf (to stderr), and main should return 2.

If the output file cannot be opened for writing, your program should inform the user as much, as with fprintf (to stderr), and main should return 3.

If the input file is not a 24-bit uncompressed BMP 4.0, your program should inform the user as much, as with fprintf (to stderr), and main should return 4.

Upon success, main should 0.

when I run it through the debugger I get

whodunit.c:9:5: error: expected identifier or '(' if (argc not_eq 3) ^ whodunit.c:15:16: error: use of undeclared identifier 'argv' char* infile = argv[1]; ^ whodunit.c:16:17: error: use of undeclared identifier 'argv' char* outfile = argv[2]; ^ whodunit.c:19:1: error: expected identifier or '(' if (inptr == (void *)0

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

Knowledge Discovery In Databases

Authors: Gregory Piatetsky-Shapiro, William Frawley

1st Edition

0262660709, 978-0262660709

More Books

Students also viewed these Databases questions

Question

Understand what a service-oriented culture is.

Answered: 1 week ago

Question

Explain the key areas in which service employees need training.

Answered: 1 week ago