【问题标题】:Swapping Characters inside an array C++ [closed]在数组 C++ 中交换字符 [关闭]
【发布时间】:2021-06-14 19:22:32
【问题描述】:

我想要制作一系列闪烁的灯光,我希望它们出现在同一行。

类似的东西

O * O * O * O * O * O *

        Title
O * O * O * O * O * O *

我希望这些角色交换位置,使其看起来像闪烁的灯光

char Lights[10] = { 'O','*','O','*','O','*','O','*','O','*'};
for (int x = 0; x >= 9; x++)
{
    cout << Lights[x];
    if (x % 2 = 1)
    {
        Lights[x] = 'O';
    }
    else
    {
        Lights[x] = '*';
    }
}

这是我尝试过的,主要问题是如何让它在同一行上反复打印和循环。我的 for 循环也出现错误,提示“初始条件不满足测试,循环体未执行” 对于我在第一个 if 语句中的 x,它说“表达式必须具有可修改的值”

【问题讨论】:

  • 到目前为止你做了什么?
  • 我已经制作了数组并让它只打印字符而不进行任何交换
  • 怎么做取决于你的终端和平台。
  • 尝试交换它们并向我们展示代码,我们将帮助您解决错误。
  • 标准 C++ 控制台输出不支持屏幕上的“交换”字符。为此,您需要使用特定于平台的控制台 API,或者像 ncurses 这样的包装库。

标签: c++ arrays sorting


【解决方案1】:

我不确定多行是否可行,但对于其中之一,这是 linux 中的方式:

while(true)
{
    std::cout<<"\rO * O * O * O * O *"<< std::flush;
    sleep(1);
    std::cout<<"\r* O * O * O * O * O"<< std::flush;
    sleep(1);
}

【讨论】:

    【解决方案2】:

    举个例子

     char Array[10] = {O,*,O,*,O,*,O,*,O,*}
    

    你可以从头开始打印一次。

    void printForward(char arr[10]) {
        for (int i = 9; i >= 0; i--) {
            std::cout << arr[i];
        }
        std::cout << std::endl;
    }
    void printBack(char arr[10]) {
        for (int i = 0; i < 10; i++) {
            std::cout << arr[i];
        }
        std::cout << std::endl;
    }
    void printLight(char arr[]) {
    
    }
    int main() {
        char arr[10] = { 'O','*','O','*','O','*','O','*','O','*' };
    
    
        for (int i = 0; i < 1000; i++) {
            if (i % 2) printForward(arr);
            else printBack(arr);
        }
    
        return 0;
    }
    

    您还可以添加清晰的控制台屏幕,例如在 Windows 上看起来像这样

    #include<iostream>
    void printForward(char arr[10]) {
        for (int i = 9; i >= 0; i--) {
            std::cout << arr[i];
        }
        std::cout << std::endl;
    }
    void printBack(char arr[10]) {
        for (int i = 0; i < 10; i++) {
            std::cout << arr[i];
        }
        std::cout << std::endl;
    }
    void printLight(char arr[]) {
    
    }
    int main() {
        char arr[10] = { 'O','*','O','*','O','*','O','*','O','*' };
    
    
        for (int i = 0; i < 100; i++) {
            if (i % 2) printForward(arr);
            else printBack(arr);
            system("cls"); //this will clear, but its unsafe and you should look
            //for better ways to clear screen on windows
            //for unix like systems you can print "\033c"
        }
    
        return 0;
    }
    
    That would be the way to print your desired output
    

    【讨论】:

      猜你喜欢
      • 2022-01-06
      • 1970-01-01
      • 1970-01-01
      • 2018-05-18
      • 1970-01-01
      • 2021-12-16
      • 2016-04-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多