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!