我如何在C中将随机大写字母数组作为函数?

问题描述 投票:0回答:3

我正在尝试编写一个函数以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++;
}


}
c arrays random fill
3个回答
3
投票

我只想编码

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兼容的char编码。一种更便携的方式可以是

str[i] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"[random() % 26];

因为文字字符串是字符的常量数组。


2
投票

尝试一下,别忘了在程序的开头(一次)调用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;
}       

BTW,完全不是可移植的,因为规范不要求'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平台上工作。 (如果您不知道区别,请使用此选项。)


0
投票

此外,在调用fillS1()时,您应该传递第一个字符的地址。将fillS1(&s1[40]);替换为fillS1(&s1[0]);

© www.soinside.com 2019 - 2024. All rights reserved.