Saw these examples, these doesn't show at all why to use continue.

while (fgets(buf, sizeof(buf), fp) != NULL)
{
if (buf[0] == '#') continue;
/* now go process the line */
...
...
}
Can be replaced by

Code:
while (fgets(buf, sizeof(buf), fp) != NULL)
{
    if (buf[0] != '#')
    {
        /* now go process the line */
        ...
        ...
    }
}
Another example:

#include <stdio.h>
int main()
{
int x;
for (x = 1; x <= 10; x++)
{
if (x == 5)
continue;
printf("%d ", x);
}
printf("Used continue to skip printing the value 5\n");
return 0;
}
It can easily replaced by

Code:
#include <stdio.h>
int main()
{
    int x;
    for (x = 1; x <= 10; x++)
    {
         if (x != 5)
           printf("%d ", x);
    }
    printf("Used continue to skip printing the value 5\n");
    return 0;
}
Every tool in your toolbox has a purpose. Learn to use them all well, at the appropriate time. Only an amateur beats on a nail with pliers when the hammer is right there in the toolbox...
It is okay to learn all tools in your toolbox, but you also must learn why to use certain tools and why not to use certain tools. Some tools may seem very usefull, but a bit more thought can show that there exists a "better" solution for which you don't need the tool. Note that I put better between "", in my opinion it is always possible to avoid things like goto and continue, just by adapting your logic, it sometimes requires a bit more thinking about your algorithm, but that's not bad.

Anyway, I've seen lots of embedded systems passing by the last few years since I'm working and never seen goto or continue being used. So I don't think it is necessary to use, even in such time-critical and low-resource things like embedded systems.