C 如何从用户输入的一堆单词中随机选取一个字母

C 如何从用户输入的一堆单词中随机选取一个字母,c,random,C,Random,我正在尝试创建一个小程序,要求用户输入两个短语。输入两个短语后,我会将短语显示回用户。然后我把这两个短语放在一个变量中,然后用一个变量第三次显示出来 接下来,我尝试从这两个短语中随机选取一个字母,并将该字母显示给用户 我一直在网上做一些研究,看看人们是如何随机挑选字母的,但除了随机挑选单词之外,我真的没有看到任何东西,但我真的没有看到这如何应用到我自己的程序中 提前谢谢 另外,我注意到,当同时显示这两个短语时,第二个短语位于换行符上。有人能解释为什么会发生这种情况,以及如何摆脱它吗?谢谢 #in

我正在尝试创建一个小程序,要求用户输入两个短语。输入两个短语后,我会将短语显示回用户。然后我把这两个短语放在一个变量中,然后用一个变量第三次显示出来

接下来,我尝试从这两个短语中随机选取一个字母,并将该字母显示给用户

我一直在网上做一些研究,看看人们是如何随机挑选字母的,但除了随机挑选单词之外,我真的没有看到任何东西,但我真的没有看到这如何应用到我自己的程序中

提前谢谢

另外,我注意到,当同时显示这两个短语时,第二个短语位于换行符上。有人能解释为什么会发生这种情况,以及如何摆脱它吗?谢谢

#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <time.h>


int main()
{
    srand(time(NULL));
    char phrase1[100], phrase2[100];
    printf("Please enter your first phrase\t");
    fgets(phrase1, 100, stdin);
    printf("Please enter your second phrase\t");
    fgets(phrase2, 100, stdin);
    printf("The first phrase you entered was: %s", phrase1);
    printf("The second phrase you entered was: %s", phrase2);
    strcat(phrase1, phrase2);
    phrase1[strlen(phrase1)-1] = ' ';
    printf("Both phrases put together in one sentence is: %s", phrase1);
    return 0;

}
#包括
#包括
#包括
#包括
int main()
{
srand(时间(空));
字符短语1[100],短语2[100];
printf(“请输入您的第一个短语\t”);
fgets(短语1、100、标准术语);
printf(“请输入第二个短语\t”);
fgets(短语2100,标准术语);
printf(“您输入的第一个短语是:%s”,短语1);
printf(“您输入的第二个短语是:%s”,短语2);
strcat(第1、2段);
短语1[strlen(短语1)-1]='';
printf(“一句话中的两个短语是:%s”,短语1);
返回0;
}
第一个问题: -找到一种生成介于0和某个整数a之间的随机整数的方法。 -对组合字符串中的字符数进行排序。假设得到的随机整数是B。 -打印出你的字符串[B]

我觉得你可以把它拼凑起来。在学习过程的这一阶段,获取代码答案可能没有好处

第二个问题:我看到您正在用空格替换第一个字符串的结尾,试图捕捉
\n
。根据您的环境,它前面可能还有一个
\r

第一个问题: -找到一种生成介于0和某个整数a之间的随机整数的方法。 -对组合字符串中的字符数进行排序。假设得到的随机整数是B。 -打印出你的字符串[B]

我觉得你可以把它拼凑起来。在学习过程的这一阶段,获取代码答案可能没有好处

第二个问题:我看到您正在用空格替换第一个字符串的结尾,试图捕捉
\n
。根据您的环境,它前面可能还有一个
\r

第一个问题: -找到一种生成介于0和某个整数a之间的随机整数的方法。 -对组合字符串中的字符数进行排序。假设得到的随机整数是B。 -打印出你的字符串[B]

我觉得你可以把它拼凑起来。在学习过程的这一阶段,获取代码答案可能没有好处

第二个问题:我看到您正在用空格替换第一个字符串的结尾,试图捕捉
\n
。根据您的环境,它前面可能还有一个
\r

第一个问题: -找到一种生成介于0和某个整数a之间的随机整数的方法。 -对组合字符串中的字符数进行排序。假设得到的随机整数是B。 -打印出你的字符串[B]

我觉得你可以把它拼凑起来。在学习过程的这一阶段,获取代码答案可能没有好处

第二个问题:我看到您正在用空格替换第一个字符串的结尾,试图捕捉
\n
。根据您的环境,它前面可能还有一个
\r

首先为RNG种子:

srandom(getpid() ^ time(NULL));
然后得到一个介于0和strlen(短语)-1之间的随机数:

int rnum = random() % strlen(phrase);
然后打印有问题的字符:

printf("random char: %c\n",phrase1[rnum]);
在串联字符串中看到换行符的原因是,
fgets
将按Enter键时生成的换行符添加到字符串中。您可以通过将字符串修剪一个字符来删除该字符串:

fgets(phrase1, 100, stdin);
phrase1[strcspn(phrase1, "\n")] = '\0';
...
fgets(phrase2, 100, stdin);
phrase2[strcspn(phrase1, "\n")] = '\0';
首先为RNG种子:

srandom(getpid() ^ time(NULL));
然后得到一个介于0和strlen(短语)-1之间的随机数:

int rnum = random() % strlen(phrase);
然后打印有问题的字符:

printf("random char: %c\n",phrase1[rnum]);
在串联字符串中看到换行符的原因是,
fgets
将按Enter键时生成的换行符添加到字符串中。您可以通过将字符串修剪一个字符来删除该字符串:

fgets(phrase1, 100, stdin);
phrase1[strcspn(phrase1, "\n")] = '\0';
...
fgets(phrase2, 100, stdin);
phrase2[strcspn(phrase1, "\n")] = '\0';
首先为RNG种子:

srandom(getpid() ^ time(NULL));
然后得到一个介于0和strlen(短语)-1之间的随机数:

int rnum = random() % strlen(phrase);
然后打印有问题的字符:

printf("random char: %c\n",phrase1[rnum]);
在串联字符串中看到换行符的原因是,
fgets
将按Enter键时生成的换行符添加到字符串中。您可以通过将字符串修剪一个字符来删除该字符串:

fgets(phrase1, 100, stdin);
phrase1[strcspn(phrase1, "\n")] = '\0';
...
fgets(phrase2, 100, stdin);
phrase2[strcspn(phrase1, "\n")] = '\0';
首先为RNG种子:

srandom(getpid() ^ time(NULL));
然后得到一个介于0和strlen(短语)-1之间的随机数:

int rnum = random() % strlen(phrase);
然后打印有问题的字符:

printf("random char: %c\n",phrase1[rnum]);
在串联字符串中看到换行符的原因是,
fgets
将按Enter键时生成的换行符添加到字符串中。您可以通过将字符串修剪一个字符来删除该字符串:

fgets(phrase1, 100, stdin);
phrase1[strcspn(phrase1, "\n")] = '\0';
...
fgets(phrase2, 100, stdin);
phrase2[strcspn(phrase1, "\n")] = '\0';

因为
fgets()
读取并存储新行。只需在
0
strlen(phrase1)-1
之间选择一个随机数
n
,然后显示
phrase1[n]
在连接两个字符串之前用空格替换
phrase1
中的新行。在
0
strlen之间生成一个随机数(短语)-1
。然后将其用作
phrase1
的索引。对于第二个问题,
fgets
读取整行,包括换行符。要删除
'\n'
,请参阅因为
fgets()
读取并存储换行符。只需在
0
strlen(phrase1)之间选择一个随机数
n
-1
,并显示短语1[n]