【发布时间】:2016-04-13 15:18:31
【问题描述】:
我正在尝试创建一个程序来解决倒计时单词游戏,该游戏涉及询问元音和辅音的比例。我想将随机字符添加到将传递给排列函数的字符串中。
当我运行以下程序并选择“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;
}
【问题讨论】:
-
为什么你的
main返回一个非整数值?按照惯例,main应该始终返回一个int,其值取决于您的程序是否正确执行。 -
这是作业题吗?如果是这样,请明确提及
-
这看起来更像是一个 C++ 程序,并且使用了微软的“安全”字符串函数。忽略这一点,主要问题是
strcat_s可以处理以空字符结尾的字符串,但是您将指针传递给字符数组(vowel或consonent)中的单个字符,其中大多数肯定没有被遵循由一个空终止符。vowel和consonent数组作为一个整体不包含以 null 结尾的字符串,从而导致未定义的行为。 -
你的标题和标签是C,但文件扩展名是cpp。您使用哪种语言?
-
@IanAbbott 实际上
vowels包含终止空字符作为未显式初始化的最后一个元素,而consonants没有。