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.
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:
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)
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)
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)
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)
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)
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)
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)
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)
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)
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
LEARN ABOUT ULTRIX
fscanf
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 Alsointro(3int), setlocale(3), strtod(3), strtol(3), printf(3int), getc(3s), printf(3s), scanf(3s)
Guide to Developing International Software
scanf(3int)