如何在C中向字符串添加随机生成的字符?
我正在尝试创建一个程序来解决倒计时单词游戏,该游戏涉及到询问元音和辅音的比例。我想向将传递给置换函数的字符串中添加随机字符 当我运行下面的程序并选择“C”时,我得到错误“l缓冲区太小&&0 C”,程序崩溃 键入“V”将给出错误“Invalid!EIOU”,而不会崩溃 如何使用用户输入的元音和辅音数量创建此随机字符串 这是否应该改为作为数组执行如何在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
// 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;
}