1

嘿伙计们,我用 C 语言创建了一个程序,它使用一个确定数字是否完美的函数来测试 1 到 10000 之间的所有数字,以检查它们是否完美。一旦找到这些,它就会将它们打印给用户,它们是 6、28、496 和 8128。在此之后,程序将每个完美数字的所有因数打印给用户。这一切都很好。这是我的问题。

我任务的最后一部分要求我:

"使用"twirly" 表示您的程序正在愉快地工作。"twirly" 是以下字符按以下顺序相互叠加打印:'|' '/' '-' '\'。这具有产生旋转轮的效果 - 即“旋转”。提示:要做到这一点,您可以在 printf 中使用 \r(而不是 \n)来仅给出回车(而不是回车换行)。(注意:这可能不适用于某些系统 - 您不必这样做。)“

我不知道什么是 twirly 或如何实现。我的导师说这与我也不知道如何使用的睡眠和延迟功能有关。任何人都可以帮助我完成最后一个阶段,我所有的编码都完成了,但我无法让这个“扭曲”的东西工作。

4

3 回答 3

0

如果您想同时执行以下任务

  1. 测试数字和
  2. 在屏幕上显示旋转

    当过程继续进行时,您最好考虑使用线程。使用 POSIX 线程,您可以在一个线程上启动任务,另一个线程将在终端上向用户显示旋转。

#include<stdlib.h>

#include<pthread.h>

int Test();

void Display();

int main(){
// create threads each for both tasks test and Display
//call threads
//wait for Test thread to finish
//terminate display thread after Test  thread completes
//exit code
}

请参阅第 12 章的线程 开始 linux 编程电子书

于 2015-04-07T10:19:55.997 回答
0

鉴于用户正在“等待”的程序,我相信所述问题和使用sleep()或线程的解决方案是错误的。

在现代个人计算机上使用C 语言生成所有低于 10,000 的完美数字大约需要 1/10 秒。因此,任何显示计算机“愉快地工作”的设备要么永远不会被看到,要么会显着干扰完成工作所需的时间。

但是无论如何,让我们为完美的数字搜索做一个工作。为了简单起见,我不再打印这些因素。由于 10,000 太低而无法看到旋转的动作,我将限制提高到 100,000:

#include <stdio.h>
#include <string.h>

int main()
{
    const char *twirly = "|/-\\";

    for (unsigned x = 1; x <= 100000; x++)
    {
        unsigned sum = 0;

        for (unsigned i = 1; i <= x / 2; i++)
        {
            if (x % i == 0)
            {
                sum += i;
            }
        }

        if (sum == x)
        {
            printf("%d\n", x);
        }

        printf("%c\r", twirly[x / 2500 % strlen(twirly)]);
    }

    return 0;
}

不需要sleep()或线程,只需将其键入问题本身的复杂性并以合理的时间间隔对其进行更新。

现在问题来了,尽管上述方法有效,但用户永远不会看到第五个完美数字出现 100,000 的限制,甚至 100,000,000 的限制,这应该会产生更多,他们可能会放弃,因为这是一个坏的 (慢)算法来找到它们。但他们将有一个转折点看。

于 2016-11-25T00:22:59.953 回答
-1
i as integer  
loop i: 1 to 10000   
     loop j: 1 to i/2    
          sum as integer   
          set sum = 0  
          if i%j == 0  
               sum+=j  
          return sum==i  
     if i%100 == 0  
          str as character pointer  
          set *str = "|/-\\"  
          set length = 4  
          print str[p] using "%c\r" as format specifier   
          Increment p and assign its modulo by len to p    
于 2015-04-07T10:03:17.700 回答