OlveraeUNSW
Back to problems
COMP1521

COMP1521 2022T3 Q6 — File I/O

COMP1521 2022T3 Q6 · 10 marks · C
Topic: File I/O · Source: https://cgi.cse.unsw.edu.au/~cs1521/26T1/resources/practice_exams.html

Summary: Delete the n-th line of a file


Write a C program, 22t3final_q6.c ,
which takes two arguments, a filename and an integer n .

Your program should delete the n -th line from the file.

Lines are numbered starting at 1.

If the file has less than n lines, your program should do nothing.

Your program should print nothing on stdout.
It should only modify the file .

For example:

printf 'Hello\nhow\nare\nyou\n' > hello.txt
cat hello.txt
Hello
how
are
you
./22t3final_q6 hello.txt 3
cat hello.txt
Hello
how
you

printf 'I\nam\nreally great thank you\n' > answer.txt
cat answer.txt
I
am
really great thank you
./22t3final_q6 answer.txt 5
cat answer.txt
I
am
really great thank you
./22t3final_q6 answer.txt 1
cat answer.txt
am
really great thank you

seq 7 15 > numbers.txt
cat numbers.txt
7
8
9
10
11
12
13
14
15
./22t3final_q6 numbers.txt 5
cat numbers.txt
7
8
9
10
12
13
14
15

You may remember from the lectures, reading and writing to a single file
simultaneously can cause a range of tricky issues,
You may find creating a extra file (a temporary file) helpful in this exercise.

You can use make(1) to build your code:

make 22t3final_q6

Your program should not produce any output on stdout or stderr.

Assume a line is zero or more characters followed by a '\n' character.

Your program can assume it is always given as argument the name of an existing file and a positive integer.

You are permitted to create extra (temporary) files in the current directory.

You may define and call your own functions if you wish.

Your solution must be in C only.

Your solution must not be in MIPS , C++ , Python , or any other language.

Your program cannot call external programs.

Your program cannot use any of: fork() / exec() , posix_spawn() , system() , or any other similar functions.

Your program may call any functions from the C standard library available by default on CSE Linux systems.

Including but not limited to: stdio.h , stdlib.h , string.h , math.h , assert.h , etc.

No error checking is necessary or required.


🤖 Adapted: write a C program with args <file> <n>. Print the file content to stdout with line n (1-indexed) removed. If the file has fewer than n lines, print it unchanged.

Fixture files are provided in the run workspace; reference outputs verified on the sandbox.

Samples

stdin
expected
Hello
how
you
stdin
expected
I
am
ok
c-dcc
14