Discussion specific to NXT-G, NXC, NBC, RobotC, Lejos, and more.
-
HaWe
- Posts: 2500
- Joined: 04 Nov 2014, 19:00
Post
by HaWe »
hey yall,
how can I display a letter by it's ascii code like
Code: Select all
printf("%s", ascii(65)); // should display "A"
TextOut(0,56, ....(?) );
-
mattallen37
- Posts: 1818
- Joined: 02 Oct 2010, 02:19
- Location: Michigan USA
-
Contact:
Post
by mattallen37 »
I use FlattenVar, like this:
Code: Select all
task main(){
string ascii_char = FlattenVar(65);
TextOut(0, 56, ascii_char);
while(true);
}
I only used the string variable to prove that it is actually a string, but the example works just the same like this:
Code: Select all
task main(){
TextOut(0, 56, FlattenVar(65));
while(true);
}
-
HaWe
- Posts: 2500
- Joined: 04 Nov 2014, 19:00
Post
by HaWe »
that's perfect, thank you!
so we can say
Code: Select all
#define num2ascii(x) FlattenVar(x)
a pity, with printf it doesn't work directly
Code: Select all
task main(){
TextOut(0, 48, FlattenVar(65));
printf("%s", FlattenVar(66));
while(true);
}
(if we once will have stdio functions...? ^^)[/size]
-
spillerrec
- Posts: 358
- Joined: 01 Oct 2010, 06:37
- Location: Denmark
-
Contact:
Post
by spillerrec »
The C way of doing this is by accessing the character directly:
Code: Select all
string ascii = " ";
ascii[0] = 65;
If you are using formatted output, you can use %c and avoid the overhead of an array:
Code: Select all
task main(){
TextOut(0, 48, FlattenVar(65));
printf("%c", 66);
while(true);
}
If it does not need to be variable, you would normally use:
However the NXC compiler does not currently support this escape sequence.
-
HaWe
- Posts: 2500
- Joined: 04 Nov 2014, 19:00
Post
by HaWe »
yes, indeed, I remember that I even once read about that "%c" format string - but then I forgot about it.
It works fine, thanks!
(shooting with cannons at sparrows^^ )
Code: Select all
int _cur_x_=0, _cur_y_=56;
#define scrclr() { \
ClearScreen(); \
_cur_x_=0; _cur_y_=56; \
}
#define printfxy( x, y, _fmt, _val) { \
_cur_y_=y; \
string sval1 = FormatNum(_fmt, _val); \
TextOut(x, y, sval1); \
_cur_x_=x+6*(strlen(sval1)); \
}
// like printf() in stdio.h
#define printfEx(_fmt, _val) { \
int x=_cur_x_; int y=_cur_y_; \
int posn, posf, slen, rlen; \
string rstr, lstr; \
slen=strlen(_fmt); \
posn=Pos("\n", _fmt); \
posf=Pos("%", _fmt); \
if (posn>=0) { \
rlen=slen-posn-1; \
lstr= LeftStr(_fmt,posn); \
rstr= RightStr(_fmt,rlen); \
strcat(lstr,rstr); \
if(posn<posf) { \
if(y>=8)y-=8; x=0;} \
printfxy(x,y,lstr,_val); \
if(posf<posn) { \
if(_cur_y_>=8) \
_cur_y_-=8; _cur_x_=0;} \
} \
else printfxy(x,y,_fmt,_val); \
}
task main() {
scrclr();
for(int i=0; i<255; ++i) { // (0...31 not displayed)
printfEx("%3d", i); printfEx(" %c ", i);
printfEx("%3d", ++i); printfEx(" %c ", i);
if (_cur_y_==8) printfEx(" <%d>", 1+i/16);
if (_cur_y_==0) {
printfEx("%s", " BTN");
if (getchar()==BTNLEFT) {i=(i>=31?i-=32:111);}
scrclr();
}
else printfEx("\n","");
if (i>126) i=-1;
}
while(true);
}
-
iplewis
- Posts: 25
- Joined: 22 Mar 2012, 08:48
Post
by iplewis »
Another way* is like this
Code: Select all
char variable;
string msg;
sprintf(msg, "%c", variable);
TextOut(x, y, msg, DRAW_OPT_NORMAL);
*Specifically, the way that I stumbled on after several unsuccessful attempts to do this a couple of weeks ago
Ian
Users browsing this forum: No registered users and 0 guests