我有一个我不太懂的功能
从0到110有109个地址。
这段代码如何将文字移到左边?
b=0;
while(b<109)
{
Display_Buffer[b] = Display_Buffer[b+1];
b++;
}
如果b从0开始,那么b + 1应该将文本滚动到右边而不是???或者我错了?因为在0,b + 1表示地址是1,如果它是b-1,那么地址应该是110(因此向左滚动)......但这不是这里的情况,有人可以提供粗略的解释吗?
display_buffer包含存储在其数组中的字符串信息。
-
修改
谢谢你们!如果我用[b-1]替换Display_Buffer [b + 1] ...会反转这个过程怎么办?怎么样?
好的,我意识到我必须添加b = 109和while(b!= 0)..否则就没有意义了。
但是,如果Display_Buffer [109] = Display_Buffer [108],那是否意味着它会产生与你们回答的相同的效果,但反过来呢?
答案 0 :(得分:5)
每个位置都分配了右侧位置的值,因此效果是向左滚动。
考虑这个令人敬畏的ASCII艺术:
0 1 2 3 4 Before: [h][e][l][l][o] After: [e][l][l][o][ ]
位置0的插槽设置为插槽1的值,因此'h'变为'e',依此类推。
答案 1 :(得分:2)
它将位置b
的字节设置为等于b+1
位置的字节
所以字节慢慢向左移动,一次一个
答案 2 :(得分:2)
/* [a|b|c|d|e|f|...] */
Display[0] = Display[1] /* [b|b|c|d|e|f|...] */
Display[1] = Display[2] /* [b|c|c|d|e|f|...] */
Display[2] = Display[3] /* [b|c|d|d|e|f|...] */
// ...
/* [b|c|d|e|f|g|...] */
当你做这类事情时,你必须注意不要从错误的方向覆盖......
/* [a|b|c|d|e|f|...] */
Display[1] = Display[0] /* [a|a|c|d|e|f|...] */
Display[2] = Display[1] /* [a|a|a|d|e|f|...] */
// ...
/* [a|a|a|a|a|a|...] */
从最后做同样的事情
Display[last] = Display[last-1] /* [a|b|c|d|e|f|...] */
// ...
Display[2] = Display[1] /* [a|b|b|c|d|e|...] */
Display[1] = Display[0] /* [a|a|b|c|d|e|...] */
Display[0] = ' ' /* [ |a|b|c|d|e|...] */
答案 3 :(得分:1)
让我们说Display_Buffer
最初是"abcd"
。所以Display_Buffer[0] = 'a', Display_Buffer[1] = 'b'
等等。现在你正在做的是DisplayBuffer[0] = DisplayBuffer[1]
,即用'b'代替'a',用'c'代替'b',用'd'代替'c'。这会产生向左移动文本的效果。