嘿伙计们我用C创建了一个程序来测试1到10000之间的所有数字,以检查它们是否完美,使用的函数可以确定数字是否完美。一旦找到它们就会将它们打印给用户,它们分别为6,28,496和8128.然后,程序会将每个完美数字的所有因子打印出来给用户。这一切都很好。这是我的问题。
我的任务的最后一部分要求我:
"使用" twirly"表明你的程序正在愉快地工作。 A" twirly"是按以下顺序打印在彼此顶部的以下字符:' |' ' /' ' - ' ' \&#39 ;.这具有产生纺车轮的效果 - 即“旋转”#34;。提示:为此,您可以在printf中使用\ r(而不是\ n)来仅提供回车符(而不是回车换行符)。 (注意:这可能不适用于某些系统 - 您不必这样做。)"
我不知道什么是twirly或如何实现一个。我的导师说它与睡眠和延迟功能有关,我也不知道如何使用。任何人都可以帮助我完成最后一个阶段,它很糟糕我的所有编码都已完成,但我无法得到这个" twirly"工作的事情。
答案 0 :(得分:0)
如果你想同时执行
的任务在屏幕上显示twirly
当进程继续时,你最好考虑使用线程。使用POSIX线程,你可以在一个线程上启动任务,另一个线程将在终端上向用户显示twirly。
#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章 beginning linux programming ebook
答案 1 :(得分:0)
您可以使用“睡眠”功能来延迟程序的操作。请注意,这可能不适用于某些系统。
#include <stdio.h>
// to use "Sleep" function on Windows OS
#include <Windows.h>
void loadingAnimation(int);
int main() {
while (true) {
// replace this "Hello World!" with your code
printf("Hello World!\n");
loadingAnimation(50);
}
}
void loadingAnimation(int speed) {
printf("|");
Sleep(speed);
printf("\r/");
Sleep(speed);
printf("\r-");
Sleep(speed);
printf("\r\\");
Sleep(speed);
printf("\r");
}
如果上面的“睡眠”功能不起作用,请尝试以下操作:
#include<stdio.h>
#include<dos.h>
main()
{
printf("Wait for 5 seconds to exit.\n");
sleep(5);
return 0;
}
或试试这个:Using "unistd.h"
答案 2 :(得分:0)
鉴于用户正在“等待”的程序,我认为所述的问题以及使用ContentProvider
或线程的解决方案都是错误的。
在现代个人计算机上使用 C 生成10,000以下的所有完美数字需要大约1/10秒。因此,任何显示计算机的设备“快乐地工作”都将永远不会被看到,或者会显着地干扰完成工作所需的时间。
但是,无论如何,让我们做一个完美的数字搜索工作。我没有打印出因素来保持这个简单。由于10,000太低而无法看到twirly行动,我已将限制提高到100,000:
sleep()
不需要#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;
}
或线程,只需将其置于问题本身的复杂性中,并以合理的时间间隔进行更新。
现在这里有了捕捉,虽然上面的工作,但用户永远不会看到第五个完美的数字弹出100,000限制,甚至有100,000,000限制,这应该产生一个,他们可能会放弃,因为这是找到它们的坏(慢)算法。但是他们会有一个值得关注的东西。
答案 3 :(得分:-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