• C

Problem exiting menu on Enter key

I am having a bit of a problem with a project that I am working on...

Here is what I need to be able to do.

The user will be entering data into a set of fields.
If the end user does not enter a value into the field and presses enter,
it will quit the loop.

That is it...

The problem that I have right now is with scanf and gets, if the user presses enter and no value is entered, it will insert a newline character, and remain in the field.

Thanks for your help...
theravibesAsked:
Who is Participating?
 
jkrConnect With a Mentor Commented:
Use 'gets()' instead, e.g.

int main( void )
{
   char line[81];

   printf( "Input a string: " );
   gets( line );
   if (strlen(line))printf( "The string entered was: %s\n", line );
    else printf( "Only the 'ENTER' key was pressed\n");
}

Then, refactor your problem to

int read_value ( char* buf) {

    gets(buf);

    return(strlen(buf));
}

The above function will read the input field and return '0' if only enter was pressed, and the length of the field otherwise.
0
 
Jaime OlivaresSoftware ArchitectCommented:
you can use gets() to read user entry, it will return anyway, and then use sscanf to apply scanf to the string filled by gets.
0
 
Jaime OlivaresSoftware ArchitectCommented:
sscanf() will return you the number of arguments read, so you will know if input is complete
0
Worried about phishing attacks?

90% of attacks start with a phish. It’s critical that IT admins and MSSPs have the right security in place to protect their end users from these phishing attacks. Check out our latest feature brief for tips and tricks to keep your employees off a hackers line!

 
ankuratvbCommented:
First of all,usage of gets() is not recommended because of buffer overrun problems.You can use fgets() instead.Read the man pages for gets() for details.

char str[MAX];
You can use scanf("[^\n]",str); or fgets(str,MAX,stdin); to store a line of text(till enter is pressed)

To store everything until enter is pressed into an char array str.Then,you can do the parsing for the values yourself.(You can use sscanf() here to parse the string for values,as jaime pointed out)

0
 
theravibesAuthor Commented:
Worked like a charm...

Thanks jkr...
0
 
ankuratvbCommented:
Hi Tyson,

Glad to know you solved your problem,but here's why i said gets() should not be used.

From the man pages: (http://www.rt.com/man/getc.3.html)

       Because it is impossible to tell without knowing the  data
       in  advance  how  many  characters  gets()  will read, and
       because gets() will continue to store characters past  the
       end  of  the buffer, it is extremely dangerous to use.  It
       has been used to break  computer  security.   Use  fgets()
       instead.

You can use jkr's idea using fgets() instead of gets()
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.