Why do the FSCANF and SSCANF functions not work as expected with the %i and %d format specifiers?

4 次查看(过去 30 天)
There appears to be problems using the SSCANF function and the FSCANF function with the %d and %i format specifiers. The following output at the MATLAB command prompt illustrates this problem:
sscanf('0008','%4d') % works as expected
ans =
8
sscanf('2.34','%4d') %does not work as expected
ans =
''
sscanf('0008','%4i') %does no work as expected
ans =
''
sscanf('8','%4i') %this works as expected
ans =
8

采纳的回答

MathWorks Support Team
The above behavior of the FSCANF and SSCANF functions are the expected behavior. Note that the two cases that seemingly do not work as expected actually return "silent" errors. You can view these errors if you call the SSCANF function with 4 output arguments and look at the ERRMSG output.
[A,COUNT,ERRMSG,NEXTINDEX] = SSCANF(S,FORMAT,SIZE)
The problem in the first case occurs because it is not acceptable to pass digits containing a decimal point as input to be scanned by %d (which takes a base10 integer).
[a,count,errmsg,nextidx]=sscanf('2.34','%3d') % decimal point
a = ''
count = 0
errmsg = Matching failure in format.
nextidx = 1
The second problem occurs because the %i refers to a base10 integer by default, unless the numeric value begins with 0x or 0X (zero x), in which case it is a base16 (hex) integer and if it begins with a 0 (zero) then it is a base8 (octal) integer.
[a,count,errmsg,nextidx]=sscanf('08','%4i') % octal digits are 0-7.
a = ''
count = 0
errmsg = Matching failure in format.
nextidx = 1
The above code caused an error because 8 is not a valid octal digit.

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Get Started with MATLAB 的更多信息

产品

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by