필터 지우기
필터 지우기

When I try to get a prompt to show a variable in it, it shows a random symbol instead?

조회 수: 4 (최근 30일)
For example, in my code [r,c] = size(Temp_Data) assigns r to be 366. However, when I try to prompt the user to enter a number between 1 and r using this code
input(['Please choose a day from 1 to ' c '\n'])
the r shows up as a Ů and if I use c in place of r I get instead. Anyone know why the number isn't showing?

채택된 답변

Stephen23
Stephen23 2018년 2월 10일
편집: Stephen23 2018년 2월 10일
pmt = sprintf(Please choose a day from 1 to %d\n',c);
day = str2double(input(pmt,'s'))
You assumed that by concatenating a numeric value c with some characters MATLAB would magically convert that number into a string representation of that number, whereas in fact MATLAB converts it into a character with that character code, e.g. if c was equal to 32 then you would get a space character. You can learn about character codes here:
If you want to get the string representation of a number then use one of the functions that convert to string, e.g. sprintf, num2str, etc.

추가 답변 (1개)

Walter Roberson
Walter Roberson 2018년 2월 10일
When you use [] (formally named horzcat) between a character vector and a numeric value, the result is defined to be the same as concatenating the character vector and char() of the numeric value.
char() of a decimal value is not the character representation of the decimal digits of the number: char() takes uint16() of the value and then says "stop intepreting this value as being a number and start interpreting it as a character". For example char(42) is not '42', it is '*' because the 43rd entry in the character tables is '*' (43rd because the counting starts from 0). char(366) is 'Ů' because that character is the 367'th entry in the character tables.
You should use
input( sprintf('Please choose a day from 1 to %d ', c) )
or, if you are using R2017a or later you can instead use
input( "Please choose a day from 1 to " + c )
Notice the double-quotes around the characters instead of single quotes. Double-quotes are used for string() objects, which are not character vectors. The + operator is defined between strings and numeric values as creating a printable representation of the numeric value and concatenating it with the string. However, this functionality is badly indexed, showing up only in the examples https://www.mathworks.com/help/matlab/ref/plus.html#btx3zvy-1, and there is no documentation about what format will be used for the converted numeric value, with the results being difficult to predict. So if you want any level of control about how the numeric value is to be represented, using sprintf() instead of string operators is much more robust.

카테고리

Help CenterFile Exchange에서 Data Type Conversion에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!

Translated by