Sponsored Content
Full Discussion: C first Script Question
Top Forums Programming C first Script Question Post 302751799 by Corona688 on Friday 4th of January 2013 01:13:30 PM
Old 01-04-2013
scanf() has an unfortunate problem where, if it finds any bad data in the stream, it puts it back. You are asking for %d, so it looks for digits. If it sees any non-digits, it will give up and not even show them to you.

Imagine you're trying to read 9 numbers with 9 scanf calls, and on the very first one you type in A then enter. The first scanf will see 'A', decide it's not a number, and put it back. This means the second will also see 'A'. So will the third, fourth, fifth, sixth, seventh, eighth, and ninth.

sscanf, which operates on strings instead of streams, avoids this problem, since it has nowhere to "put back" the letter into. It just uses the string you give it and doesn't care what happened last time. fgets() and sscanf() make a good team; fgets reads entire lines and turns them into strings, while sscanf() processes strings and turns them into what you want.

Code:
while(fgets(buf, 512, stdin) != NULL)
{
        int value;
        if(sscanf(buf, "%d", &value) == 1)
        {
                printf("You typed a number\n");
        }
        else
        {
                printf("You didn't type a number\n");
        }
}

Note that this will accept things like 1234a, since sscanf will stop at the a.

Last edited by Corona688; 01-04-2013 at 02:18 PM..
These 2 Users Gave Thanks to Corona688 For This Post:
 

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

Another script question.

Hi, First off I usually script in the bash shell. Ok, in my script I am checking to see if the filename has a .txt extension. So I was trying: if then echo "Must contain a valid .txt extension" fiandif ] then echo "Must contain a valid .txt extension" fiBut no go the first... (5 Replies)
Discussion started by: Astudent
5 Replies

2. UNIX for Dummies Questions & Answers

script question

Correct me if i'm wrong, but by adding "#!/bin/ksh" at the start of a script will force it to run in the korn shell no matter which shell you are currently using?? (2 Replies)
Discussion started by: shad0w75
2 Replies

3. Shell Programming and Scripting

script question

I'm using solaris and i have an old script that an ex employee wrote but i can't seem to get it working. well is just one part of the script if ($?MC_PROD_DIR == 0) setenv MC_PROD_DIR $HOME/PRODUCTION source $MC_PROD_DIR/scripts/localenv ** i understand what this part of the script is... (1 Reply)
Discussion started by: fusionjd
1 Replies

4. UNIX for Dummies Questions & Answers

Script question

Can anyone help with these scripts? Im new to this and struggling. Thank you for your help. Pre-requisites Create a file with x amount of lines in it, the content of your choice. (Have already done this) Script 1 Write a script that takes two arguments. The first being a line of text,... (3 Replies)
Discussion started by: beginner1
3 Replies

5. Shell Programming and Scripting

script question

Anyone know why this won't work? #!/usr/bin/ksh for db in `cat /etc/oratab|egrep ':N|:Y' | grep -v \* | cut -f1 -d":"` do echo "************************" echo "database is $db" echo "************************" done I am getting an error on the line... (7 Replies)
Discussion started by: ace2000
7 Replies

6. Shell Programming and Scripting

Script Question

Here is my problem. I have a txt file with a list of user names in both upper case and lower case. I need to remove the names from the passwd file. I want to be able to run a script that looks at my txt list and then removes those names from the passwd file. It would be nice if it backed up the... (3 Replies)
Discussion started by: wgartin
3 Replies

7. Shell Programming and Scripting

Script question

I am trying to write a script to check the STIG our unix boxes. I want to put in checks to determine if certain files or directories are there. For example: If /opt/SUNWexplo exists echo "Sun Explorer exists" else echo "Sun Explorer is not installed" I am sure I could write... (2 Replies)
Discussion started by: rkruck
2 Replies

8. UNIX for Dummies Questions & Answers

Script Question

I have a script that will calculate some information about the current directory that I run the script in. How can I have it where it gets an argument from the user(such as a directory) and the script calculate the information for the given directory? Any help is greatly appreciated. (8 Replies)
Discussion started by: tr32
8 Replies

9. Shell Programming and Scripting

script question

How can I include a counter in this if statement so only sends out 5 notifications. # the if statement will check for the lines status, if status is down sends email if then LIST="user@email.com" mail -s "rje_lines_down" $LIST < ${tmpfile} #sends an email to list fi thanks... (2 Replies)
Discussion started by: d4n3lu
2 Replies

10. Shell Programming and Scripting

Script question

I know some tricks like this : echo " E"; sleep 0.1; clear; echo " Er"; sleep 0.1; clear; echo " Err"; sleep 0.1; clear; echo " Erro"; sleep 0.1; clear; echo " Error ";... (2 Replies)
Discussion started by: hakermania
2 Replies
scanf(3int)															       scanf(3int)

Name
       scanf, fscanf, sscanf - convert formatted input

Syntax
       #include <stdio.h>

       int scanf( format [, pointer ] ...  )
       char *format;

       int fscanf( stream, format [, pointer ] ...  )
       FILE *stream;
       char *format;

       int sscanf( s, format [, pointer ] ...  )
       char *s, *format;

Description
       The  international functions and are similar to the standard I/O functions. The difference is that the international functions allow you to
       use the %digit$ conversion character in place of the I% character you use in the standard I/O functions. The digit is  a  decimal  digit  n
       from 1 to 9.  The international functions apply conversions to the n th argument in the argument list, rather than to the next unused argu-
       ment.

       You can use % conversion character in the international functions.  However, you cannot mix the % conversion  character	with  the  %digit$
       conversion character in a single call.

       In  all	cases,	uses the radix character and collating sequence that is defined by the last successful call to category or If the radix or
       collating sequence is undefined, the function uses the C locale definitions.

   International Environment
       LC_COLLATE     Contains the user requirements for language, territory, and codeset for the character collation format.  affects the  behav-
		      ior  of regular expressions and the string collation functions in If is not defined in the current environment, provides the
		      necessary default.

       LC_NUMERIC     If this environment is set and valid, uses the international language database named in the definition  to  determine  radix
		      character rules.

       LANG	      If  this environment variable is set and valid uses the international language database named in the definition to determine
		      collation and character classification rules.  If or is defined,	their definitions supersede the definition of LANG.

Examples
       The following shows an example of using the function:
       scanf("%2$s %1$d", integer, string)
       If the input is `` january 9 '', the function assigns 9 to and ``january'' to

Return Values
       The function returns the number of successfully matched and assigned input fields.  This number can be  zero  if  the  function	encounters
       invalid input characters, as specified by the conversion specification, before it can assign input characters.

       If  the	input ends before the first conflict or conversion, returns EOF.  These functions return EOF on end of input and a short count for
       missing or invalid data items.

Environment
       In POSIX mode, the E, F, and X formats are treated the same as the e, f, and x formats, respectively;  otherwise,  the  upper-case  formats
       expect double, double, and long arguments, respectively.

See Also
       intro(3int), setlocale(3), strtod(3), strtol(3), printf(3int), getc(3s), printf(3s), scanf(3s)
       Guide to Developing International Software

																       scanf(3int)
All times are GMT -4. The time now is 01:04 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy