With "r+" the file is required to exist before fopen is called -- is that what you want? "a+" will create it if it doesn't exist already, but won't clear an existing file.

I prefer not to keep files open for the whole duration of a program -- opening them and closing them in different modes when needed. Partly so that if the program crashes, it won't keep the file locked open or incomplete.

For your program it looks reasonable enough to keep the file open throughout. Since input (fgets) also moves the file pointer, you should probably reset the file position with fseek() at the start of Listar rather than the end of Adicionar(), and add an fflush at the end of Adicionar to make sure everything makes it safely to the file.

You should also have an fclose() when your program ends.