[英]How do I fill an array of random uppercase letters as a function in C?
我正在嘗試編寫一個函數來用 40 個隨機大寫字母填充數組。 我試圖填充數組並打印它,但我沒有得到任何輸出。
先感謝您。
#include <stdio.h>
#include <stdlib.h>
void fillS1(char y[]);
int main(int argc, const char * argv[])
{
char s1[40];
int n;
fillS1(&s1[40]);
for (n = 0; n < 41; n++) {
printf("%s", s1);
}
return 0;
}
void fillS1(char y[40]){
int x = 1;
while (x < 41) {
x = rand() % 26;
x = 2 + 'A';
x = y[x];
x++;
}
}
我只會編碼
void fill_string_40(char str[])
{
for (int i=0; i<40; i++)
str[i] = 'A' + random() % 26;
str[40] = (char)0; // (char)0 is equal to use '\0'
}
並將其用作(例如在您的main
)
{ char s[41];
fill_string_40(s);
printf("%s\n", s);
}
請注意,空終止字符需要一個額外的字節。 我們假設一些 ASCII 兼容的字符編碼。 一種更便攜的方式可能是
str[i] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"[random() % 26];
因為文字字符串是字符的常量數組。
如果您使用 C++ 進行編碼,請參閱標准的<random>
頭文件。 如果您為 Linux 編寫代碼,請參閱random(4)和getrandom(2) ,也許將它與srandom(3) 一起使用。 另請閱讀有關Mersenne Twister 的信息
試試這個,不要忘記在程序開頭的某個地方調用 srand() 一次。
void fillRand(char ar[], size_t len)
{
size_t i=0;
if (0 == len)
return;
for (i=0;i<(len-1);++i)
ar[i] = (rand() % 26) + 'A';
ar[len-1] = 0;
}
順便說一句,完全不可移植,因為規范不要求 'A'..'Z' 是連續的或連續的,但它可能適合您的需要。 如果需要絕對可移植性,那么以下方法將始終有效:
void fillRand(char ar[], size_t len)
{
static const char a[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
size_t i=0;
if (0 == len)
return;
for (i=0;i<(len-1);++i)
ar[i] = a[ (rand() % (sizeof(a)-1)) ];
ar[len-1] = 0;
}
將適用於普通和 EBCDIC 平台。 (如果你不知道區別,就用這個)。
此外,您應該在調用fillS1()
時傳遞第一個字符的地址。 替換fillS1(&s1[40]);
與fillS1(&s1[0]);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.