【发布时间】:2021-08-09 04:58:59
【问题描述】:
我用 C 编写了一个简单的 fizzbuzz 程序,只是为了练习 C 语言的某些方面。我还在学习它,我来自更高级的语言。
在运行程序本身时,我注意到我的 PC 上的 HDD LED 闪烁。 我在代码中做错了什么,还是写交换,或两者兼而有之?
(运行在 Pop!_OS 20.04 上,使用 gcc 9.3.0 编译,高达 3000 万)
提前致谢!
代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void fizzbuzz(int max){
for(int i = 0; i <= max; ++i){
if(i%3==0)
printf("Fizz\n");
if(i%5==0)
printf("Buzz\n");
if(i%15==0)
printf("FizzBuzz\n");
else
printf("%d\n", i);
}
}
int main( int argc, char *argv[] ){
// argc: Count of arguments passed
// argv: Pointer to arguments
// Checking if arguments were passed, and checking the arguments themselves
if(argc>1){
if(strncmp(argv[1], "-max", 4) == 0){
fizzbuzz(atoi(argv[2]));
}
else{
printf("\nUsage: fizzbuzz_adv -max <limit of fizzbuzz>");
}
}
else{
printf("\nUsage: fizzbuzz_adv -max <limit of fizzbuzz>");
}
return 0;
}
【问题讨论】:
-
操作系统是否允许报告磁盘访问?
-
您的程序中没有任何内容会导致磁盘访问增加。它还有其他错误,但不是那样。
-
如果您要输出很多行,并且终端模拟器中有很大的回滚缓冲区,则可能会导致分页。但它必须是巨大的,就像数百万行一样。
-
我认为你应该在担心这个之前得到基本的算法。没有任何理由为数百万个数字运行 FizzBuzz。
-
我知道没有理由运行 fizzbuzz 这么长时间,我只是想尝试一下,因为我想测量代码本身的资源使用情况。而且由于我只知道需要程序运行时间超过毫秒的方法,所以我必须让它运行更长时间。