【发布时间】:2012-07-30 13:03:18
【问题描述】:
#include "stdafx.h"
#include <iostream>
#include <string>
#include <windows.h>
#include <time.h>
unsigned long n = 1;
int main()
{
int i = 0;
std::string text = "I whip my hair back and forth";
std::string wipIt = " ";
size_t sz;
sz = wipIt.size();
srand(time(0));
do{
for(i = 0; i < 10; i++)
{
int randomNumber = rand() % 15 + 1;
Sleep(50);
wipIt.resize (sz++,' ');
std::cout << wipIt;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), randomNumber);
std::cout << text << "\n";
}
for(i = 10; i > 0; i--)
{
int randomNumber = rand() % 15 + 1;
Sleep(50);
wipIt.resize (sz--,' ');
std::cout << wipIt;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), randomNumber);
std::cout << text << "\n";
}
}
while (n != 0);
return 0;
}
如果我把这篇文章搞砸了,我很抱歉,这只是我的第二篇文章。
最简单的方法是让字符串中的每个字符都变成不同的颜色,而不是让整个字符串变成相同的颜色。
整理提示也将不胜感激:P
编辑:整理了一下,随机的效果很好,谢谢大家^_^现在按字符着色?
【问题讨论】:
-
std::srand(std::time(0))(来自
)在您第一次调用 std::rand() 之前。这为伪随机数生成器设置了一个种子,该生成器是相当随机的(rand() 本质上只是迭代一长串数字,这些数字预计以随机的外观模式分布。srand(seed) set 是 rand, time 的种子(0) 是自纪元以来的当前时间(以秒为单位)(通常无论如何,无论哪种方式,它都是某些度量中的当前时间)。 -
整理提示:您使用了很多额外的牙套。我有时会使用额外的大括号来限制特定变量的生命周期,但是这里有些大括号除了弄乱缩进之外什么都不做。我会删除那些。
-
整理提示:您正在混合不同的变量大小写风格。选择一种风格,并坚持下去;)
-
endl都添加新行并刷新缓冲区。这可能会导致输出性能受到很大影响。几乎总是你只想写一个换行符:cout << Test << '\n';。using namespace std;在开始编程示例中也被大量使用,但 IMO 最好不要使用它,而只是限定名称:std::cout << Test << '\n';或使用更具体的使用声明:using std::cout; ... cout << Test; -
@BoBTFish 因为这是使用
endl的Windows 控制台,实际上并不需要立即显示输出,IMO 最好养成不使用endl的习惯。但是您是对的,在其他平台上,此应用程序可能需要刷新,因此是需要endl的少数情况之一(或您指出的flush,因为我认为您可能是对的更清楚)。