Using fgets() within a function returning an error.

A

Aomighty

Hi, I've been creating a simple calculator program that asks whether
you want to add, subtract, multiply or divide, asks you for input, and
then performs the calculation. Things seem to be going well enough, but
I've run into one problem. It seems when I use fgets() or gets() within
a function I wrote, it gives me no errors, but when run, doesn't pause
for input, but skips past it. I've tried running it inside main() and
it runs fine. Compiled using gcc 3.4.3.

Here's the code snippet involved. It's in a header file which is
included from main.c. If you run it, I believe that's what will happen.
From main, it simply calls add with add().

char bigbuff[101];

/* The rest of the code.*/

void add(void)
{
printf("What numbers do you wish to add?\n");
setupinput();
fgets(bigbuff, sizeof(bigbuff), stdin);
}

Thanks all.
 
M

Michael Mair

Aomighty said:
Hi, I've been creating a simple calculator program that asks whether
you want to add, subtract, multiply or divide, asks you for input, and
then performs the calculation. Things seem to be going well enough, but
I've run into one problem. It seems when I use fgets() or gets() within
a function I wrote, it gives me no errors, but when run, doesn't pause
for input, but skips past it. I've tried running it inside main() and
it runs fine. Compiled using gcc 3.4.3.

Best forget that gets() exists.
Note: fgets() is not necessarily the best function for the job, either
-- unfortunately, the standard library contains no good function for
that job.
Here's the code snippet involved. It's in a header file which is
included from main.c. If you run it, I believe that's what will happen.

Please give us a fighting chance: Strip your code down to a minimal
example i.e. the minimum program that still exhibits your problem.
Throwing us a snippet which may or may not contain the _actual_
error is not helpful.
BTW: function definitions are _not_ for header files.
char bigbuff[101];

Unnecessary magic number:
#define INPUTSTRLEN 100
char bigbuff[inputlen + 1];
/* The rest of the code.*/

void add(void)
{

Note: This interface tells me that the function relies on global
data. This is an indicator for not-so-good (vulgo: bad) design.
printf("What numbers do you wish to add?\n");
setupinput();

What does setupinput() do? Can the error be there?
Is it possible that you leave some '\n' out there on
stdin?
fgets(bigbuff, sizeof(bigbuff), stdin);

sizeof bigbuff is sufficient.
You did not check
- the return value of fgets()
- call ferror() to find out whether there were problems

You may want to check strlen(bigbuff) and maybe fputs(bigbuff, stdout)
to start finding the error.

Back to setupinput(): It should contain something along the
lines of
int c;
while ((c = getchar()) != EOF)
if (c == '\n')
break;
}

Thanks all.

Cheers
Michael
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
474,167
Messages
2,570,911
Members
47,453
Latest member
MadelinePh

Latest Threads

Top