尝试使用基本的C语言构建一个从1到52的随机顺序的数字列表(一副纸牌)。一切都正常,但我所有连接字符串并获得结果的尝试都以失败告终。有什么建议吗?注意:这不是作业,这是我用来创建游戏的东西。
// Locals
char result[200] = ""; // Result
int card[52]; // Array of cards
srand(time(0)); // Initialize seed "randomly"
// Build
for (int i=0; i<52; i++) {
card[i] = i; // fill the array in order
}
// Shuffle cards
for (int i=0; i<(52-1); i++) {
int r = i + (rand() % (52-i));
int temp = card[i]; card[i] = card[r]; card[r] = temp;
}
// Build result
for (int c=0; c<52; c++) {
// Build
sprintf(result, "%s%d", result, card[c]);
// Comma?
if ( c < 51 )
{
sprintf(result, "%s%s", result, ",");
}
}我的最终结果总是乱码文本。谢谢你的帮助。
发布于 2011-11-20 09:50:28
我们是在写C++还是C?在C++中,连接字符串只是:
string_out = string_a + string_b…因为你使用的是std::string。
此外,如果这是C++,那么STL就有一个std::shuffle函数。
如果这是C语言,请注意,所有的sprintf都不是连接字符串,它们只是覆盖了旧值。
发布于 2011-11-20 09:53:37
你一直写到"result“的相同位置。
sprintf不会为您执行附加操作。
您可以考虑,在每个sprintf之后,获取返回值(这是写入的字符数),并递增指向结果缓冲区的指针。例如,类似于:
(psuedo代码):
char result[200];
char * outputPtr = result;
for (int c=0; c<52; c++) {
// Build
int n = sprintf(outputPtr, "%d%s", card[c], (c<51 ? "," : ""));
outputPtr += n;
}发布于 2011-11-20 09:50:51
这将在结果字符串中的每个数字之间添加一个逗号:
// Get a pointer to the result string
char* ptr = &result[0];
for (int c = 0; c < 52; c++) {
// Add each cards number and increment the pointer to next position
ptr += sprintf(ptr, "%d", card[c]);
// Add a separator between each number
if (c < 51) {
*ptr++ = ',';
}
}
// Make sure the result string is null-terminated
*ptr = 0;https://stackoverflow.com/questions/8198825
复制相似问题