# 157 Read N Characters Given Read4

The API:`int read4(char *buf)`reads 4 characters at a time from a file.

The return value is the actual number of characters read. For example, it returns 3 if there is only 3 characters left in the file.

By using the`read4`API, implement the function`int read(char *buf, int n)`that readsncharacters from the file.

**Note:**\
The`read`function will only be called once for each test case.

**The Idea:** Buffer in 4 characters at a time until we either run out of characters to read, or the amount we read exceeds n. Modify the nth buffer to be the empty character for any offset issues.

**Complexity:** O(n/4) time and O(1) space

```cpp
// Forward declaration of the read4 API.
int read4(char *buf);


class Solution {
public:
    /**
    * @param buf Destination buffer
    * @param n Maximum number of characters to read
    * @return The number of characters read
    */
    int read(char *buf, int n) {
        int total_read = 0;
        int cur_read = 0;
        do {
            cur_read = read4(buf + total_read);
            total_read += cur_read;
        } while (cur_read == 4 && total_read < n);
        buf[n] = '\0';
        return total_read;
    }
};
```
