为什么以下代码在使用系统(“cls”)后会改变其行为?

时间:2016-07-07 02:46:34

标签: c system

#include<stdio.h>

int main() {
    //system("cls");
    char randomStr[] = "0123456789";
    printf("\n\n\n\n\t\t\t\t\t");
    while(!kbhit()) {
        int i;
        for(i = 0;i < 10;i++) {
            printf("%c", randomStr[i]++);
            while(randomStr[i] == '\n' || randomStr[i] == '\r' || randomStr[i] == '\t' ||
              randomStr[i] == '\b' || randomStr[i] == '\0' || randomStr[i] == '\a' ||
              randomStr[i] == '\v' || randomStr[i] == '\f') {

                randomStr[i]++;
            }
        }
        printf("\b\b\b\b\b\b\b\b\b\b");
    }
    return 0;
}

我希望光标向右移动并开始打印字符,然后覆盖自身,这会产生一种滚动效果(就像在彩票机中一样)。这可以在不使用system("cls")的情况下正常工作,但如果我使用system("cls"),则光标会被拉回到行的开头。下图:

没有system("cls")它工作正常(图像中的字符是随机的,在程序运行时的实例中)

without system("cls")

添加system("cls")后会发生这种情况(突出显示的区域是我预期效果发生的地方)

with system("cls")

2 个答案:

答案 0 :(得分:1)

system("cls")是一个系统调用,用于清除相关控制台上的屏幕。它的行为与在Windows命令行中用作cls的行为相同(尝试一下)。因此,这将清除屏幕上所有当前的字符,而没有&#34;滚动效果&#34;你正在寻找。

答案 1 :(得分:0)

system()命令是OS和&#34; cls&#34;的命令。是你传递的参数。 cls是清除屏幕的命令。在一些OS cls参数不是清除屏幕的命令,我不确定,但我认为在Unix中它不起作用。

至于为什么当你调用它而不是调用它时它的行为有所不同 - 我需要更多的信息,因为它取决于很多因素并且提供的代码不足以清除它。我想看看是什么你在打电话给系统之前做的事情(&#34; cls&#34;);