sprintf inputting fieldwidth problem
3 次查看(过去 30 天)
显示 更早的评论
This is my homework question:
Write a script that will generate a random integer from 1000 to 2000, ask the user for a field width, and print the random integer with the specified field width. The script will use sprintf to create a string such as ‘The # is %4d\n’ (if, for example, the user entered 4 for the field width) which is then passed to the fprintf function. To print (or create a string using sprintf) either the % or \ character, there must be two of them in a row.
The problem I have is the part where I am supposed to input the fieldwidth. Every time I try, it outputs a rounded number or something in scientific notation which i do NOT want. Below is my code:
high=2000;
low=1000;
number=rand*(high-low)+low
fieldwidth=input('Enter a field width: \n');
phrase=sprintf('Your number is %*.d \n', fieldwidth ,number)
%the fprintf is to compare with the sprintf to see if I'm doing it right
fprintf('Your number is %4d \n',number)
fprintf(phrase)
0 个评论
采纳的回答
Star Strider
2014-11-16
This is a bit tricky, because you have to know that to print out a ‘%’ as literal output in fprintf or sprintf output, you need to enter ‘%%’. So your format string (including the double ‘\\’ to output a newline character) is in the ‘fmt’ assignment here:
fieldwidth = 10;
fmt = sprintf('Your number is %%%dd \\n',fieldwidth);
x = randi(1E10);
fprintf(fmt,x)
Adapt it as necessary to your own code. Also, look at ‘fmt’ to see what the sprintf call produces.
4 个评论
Star Strider
2014-11-17
My pleasure!
You’re not the first to re-read the assignment after spending some time on it and realise you overlooked something significant. (Personal experience here!)
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Creating and Concatenating Matrices 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!