本帖最后由 夜冥 于 2014-5-29 23:50 编辑
如果你曾经不得不在ROBOTC在屏幕上输出任何东西,你可能已经使用nxtDisplayTextLine()或它的许多兄弟姐妹的其中的一个。您的代码可能会,也可能不会看起来像这样:- task main()
- {
- int num_apples = 10;
- int num_pears = 8;
- int num_cherries = 116; //这个单词是樱桃,PS:不要纠结细节!
-
- nxtDisplayCenteredTextLine(0, "ROBOTC");
- nxtDisplayCenteredTextLine(1, "Fruit Stand");
- nxtDisplayTextLine(3, "%d apples", num_apples);
- nxtDisplayTextLine(4, "%d pears", num_pears);
- nxtDisplayTextLine(5, "%d cherries", num_cherries);
- wait1Msec(5000);
- }
复制代码 屏幕将类似于下面的一个画面,这还可以吧,如果你不关心的布局。
这个程序排列的不是很整齐,多数人认为不当时那么重要。但是,考虑当项目的数量迅速改变的会发生的话,你认为“苹果”,“梨”和“樱桃”是怎样输出的情?试试下面的程序,你就会明白我的意思:- task main()
- {
- int num_apples = 0; //
- int num_pears = 0;
- int num_cherries = 0;
-
- nxtDisplayCenteredTextLine(0, "ROBOTC");
- nxtDisplayCenteredTextLine(1, "Fruit Stand");
-
- while (true)
- {
- num_apples = abs(rand()) % 200;
- num_pears = abs(rand()) % 200;
- num_cherries = abs(rand()) % 200;
-
- nxtDisplayTextLine(3, "%d apples", num_apples);
- nxtDisplayTextLine(4, "%d pears", num_pears);
- nxtDisplayTextLine(5, "%d cherries", num_cherries);
- wait1Msec(200);
- }
- }
复制代码
rand():0~32,767 随机取值,abs:返回一个数的绝对值。公式rand()%N是求范围随机数的公式,%求余,对正整数N的求余结果肯定在0~N-1之间,也就是rand()%200的结果在0~199之间。
这个时候你会发现,苹果”,“梨”和“樱桃”这三行在来回的跳,显得很乱。但有方法可以让他们的位置固定下来。
来看看下一个程序,看看你能发现的细微差别。当你理解了它,运行它,并检查出的结果。
- task main()
- {
- int num_apples = 0; // how do you like them apples?
- int num_pears = 0;
- int num_cherries = 0;
-
- nxtDisplayCenteredTextLine(0, "ROBOTC");
- nxtDisplayCenteredTextLine(1, "Fruit Stand");
-
- while (true)
- {
- num_apples = abs(rand()) % 200;
- num_pears = abs(rand()) % 200;
- num_cherries = abs(rand()) % 200;
-
- nxtDisplayTextLine(3, "%3d apples", num_apples);
- nxtDisplayTextLine(4, "%3d pears", num_pears);
- nxtDisplayTextLine(5, "%3d cherries", num_cherries);
- wait1Msec(200);
- }
- }
复制代码
现在岂不是看起来更好?robotC中支持很多格式符
支持格式符
- %c – a single character * 单个字符
- %s – a string or char array 一个字符串或字符数组
- %f – a signed or unsigned float * 一个符号或无符号浮点数
- %d – a signed or unsigned long or int *有符号或无符号long或int型
- %i – a signed or unsigned long or int 有符号或无符号long或int型
- %o – unsigned octal int or long 无符号八进long或int型
- %u – unsigned decimal int or long 无符号十进制long或int型
- %x – unsigned hex int or long (lower case, e.g. 67ad) 无符号的十六进制long或int型(小写,如67ad)
- %X – unsigned hex int or long (upper case, e.g. 67AD) *无符号的十六进制long或int型(大写,如67AD)
- %p – address of a pointer *地址指针
- %% – the actual percentage sign * 实际的百分号
前导零所以,你还能用这些方式的转变,您打印的变量看?
说你是做一个转速计数器,就像你的车(不是墨西哥餐厅),你想的位数显示的是一样的。在汽车,他们看起来像这样。有5位数字加上前导零。使用输格式符即可实现相同的。
下面这段代码会简单地从0开始计数,并与前导零显示一个5位数的数字:
- task main()
- {
- int counter = 0;
- while (true)
- {
- nxtDisplayCenteredBigTextLine(4, "%05d", counter++);
- wait1Msec(100);
- }
- }
复制代码 过一小会儿它应该像这样:
前导零的事情还将与一些其他类型的工作。
现在,我们就来看看彩车。你可以做一些很酷的东。考虑以下几点:
当我们打印出来,我们实际上只关心小数点后显示的第2号。那么,如何才能做到这一点?一起来看看:
- task main()
- {
- float pie = 3.1415926535;
- nxtDisplayCenteredBigTextLine(4, "%.2f", pie);
- wait1Msec(10000);
- }
复制代码 实际值并未改变,中位数只有正在显示的数目。
0x十六进制
我用%X修改显示数据,而是使它明显,这是一个十六进制数,我喜欢的0X添加到它,并确保他们有前导零,这样让他们排列整齐
- task main()
- {
- long pie = 3141593;
- long foo = 871839011;
- long meh = 781;
-
- nxtDisplayCenteredTextLine(2, "0x%08X", pie);
- nxtDisplayCenteredTextLine(4, "0x%08X", foo);
- nxtDisplayCenteredTextLine(6, "0x%08X", meh);
- wait1Msec(10000);
- }
复制代码"0x": 普通字符 配合显示16进制格式 "%08x": 8位对齐的16进制格式,少于8位则前补0
第一个图是我的代码给出的,是不是很整齐?
支持的功能其实还有很多格式输出的函数
- nxtDisplay*()
- writeDebuStream*()
- sprintf()
- snprintf()
- StringFormat()
还有一个叫的sscanf(功能)不在这里讲。
|