Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C中向字符串添加随机生成的字符?_C_Arrays_String_Random - Fatal编程技术网

如何在C中向字符串添加随机生成的字符?

如何在C中向字符串添加随机生成的字符?,c,arrays,string,random,C,Arrays,String,Random,我正在尝试创建一个程序来解决倒计时单词游戏,该游戏涉及到询问元音和辅音的比例。我想向将传递给置换函数的字符串中添加随机字符 当我运行下面的程序并选择“C”时,我得到错误“l缓冲区太小&&0 C”,程序崩溃 键入“V”将给出错误“Invalid!EIOU”,而不会崩溃 如何使用用户输入的元音和辅音数量创建此随机字符串 这是否应该改为作为数组执行 // April16Assignment.cpp : Defines the entry point for the console applicatio

我正在尝试创建一个程序来解决倒计时单词游戏,该游戏涉及到询问元音和辅音的比例。我想向将传递给置换函数的字符串中添加随机字符

当我运行下面的程序并选择“C”时,我得到错误“l缓冲区太小&&0 C”,程序崩溃

键入“V”将给出错误“Invalid!EIOU”,而不会崩溃

如何使用用户输入的元音和辅音数量创建此随机字符串

这是否应该改为作为数组执行

// April16Assignment.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <stdlib.h>
#include <string>
using namespace std;

const char * main() {

    char type, letters[10] = { };
    char vowels[6] = { 'A', 'E', 'I', 'O', 'U' };
    char consonants[21] = { 'B', 'C', 'D', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'V', 'W', 'X', 'Y', 'Z' };
    int i, k, v, l, c;

    for (i = 0; i < 9; i++) {
        printf("Vowel or consonant? (V/C)\n");
        scanf_s("%c", &type);

        if (type == 'V')
            for (k = 0; k<1; k++) {
                v = (rand() % 5);
                strcat_s(letters, &vowels[v]);

            }
        if (type == 'C')
            for (l = 0; l<1; l++) {
                c = (rand() % 21);
                strcat_s(letters, &consonants[c]);

            }
        else
            printf("Invalid!");
        break;
    }

    printf("%s", letters);
    return letters;
}
//April16Assignment.cpp:定义控制台应用程序的入口点。
//
#包括“stdafx.h”
#包括
#包括
使用名称空间std;
常量字符*main(){
字符类型,字母[10]={};
字符元音[6]={'A','E','I','O','U'};
字符辅音[21]={B',C',D',F',G',H',J',K',L',M',N',P',Q',R',S',T',V',W',X',Y',Z'};
int i,k,v,l,c;
对于(i=0;i<9;i++){
printf(“元音或辅音?(V/C)\n”);
扫描单位(“%c”和类型);
如果(类型=='V')
对于(k=0;k
  • 如果您输入换行符,
    scanf\u s
    将读取换行符。请在
    %c
    之前添加空格,使函数跳过它们
  • 您对strcat_s的使用似乎很奇怪。该函数将接受三个参数,但您只传递两个参数。在这种情况下,您可以只分配字符
  • >代码>使用<命名空间STD > <代码> >代码>;<代码>为C++,而不是C,它们不在此使用。删除它们。
  • 您的
    main()
    类型看起来很奇怪
试试这个(对不起,我讨厌VC++特定的函数):

#包括
内部主(空){
字符类型,字母[10]={};
字符元音[6]={'A','E','I','O','U'};
字符辅音[21]={B',C',D',F',G',H',J',K',L',M',N',P',Q',R',S',T',V',W',X',Y',Z'};
int i,k,v,l,c;
对于(i=0;i<9;i++){
printf(“元音或辅音?(V/C)\n”);
scanf(“%c”,类型(&T);
如果(类型=='V')

对于(k=0;Kouth:您的代码>主< /代码>返回非整数值?按照惯例,<代码>主< /代码>应该总是返回<代码> int >代码>,其值取决于您的程序是否被正确执行。这是一个作业问题吗?如果是这样,请注意,它看起来更像是C++程序,并且使用的是微软的“安全”。字符串函数。忽略这一点,主要问题是
strcat\u s
可用于以空结尾的字符串,但您正在传递一个指向字符数组中单个字符的指针(
元音
辅音
),其中大多数后面肯定没有空终止符。
元音
辅音
数组作为一个整体不包含以空结尾的字符串,这会导致未定义的行为。您的标题和标记是C,但文件扩展名是cpp。您使用哪种语言?@IanAbbott实际上
元音
包含终止符null字符作为未显式初始化的最后一个元素,而
辅音
没有。我删除了“Invalid!”选项并添加了break;这似乎解决了问题。感谢您的帮助!
#include <stdio.h>

int main(void) {

    char type, letters[10] = { };
    char vowels[6] = { 'A', 'E', 'I', 'O', 'U' };
    char consonants[21] = { 'B', 'C', 'D', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'V', 'W', 'X', 'Y', 'Z' };
    int i, k, v, l, c;

    for (i = 0; i < 9; i++) {
        printf("Vowel or consonant? (V/C)\n");
        scanf(" %c", &type);

        if (type == 'V')
            for (k = 0; k<1; k++) {
                v = (rand() % 5);
                letters[i] = vowels[v];

            }
        if (type == 'C')
            for (l = 0; l<1; l++) {
                c = (rand() % 21);
                letters[i] = consonants[c];

            }
        else
            printf("Invalid!");
        break;
    }

    printf("%s", letters);
    return 0;
}