【问题标题】:How do I add randomly generated characters to a string in C?如何将随机生成的字符添加到 C 中的字符串中?
【发布时间】: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 可以处理以空字符结尾的字符串,但是您将指针传递给字符数组(vowelconsonent)中的单个字符,其中大多数肯定没有被遵循由一个空终止符。 vowelconsonent 数组作为一个整体不包含以 null 结尾的字符串,从而导致未定义的行为。
  • 你的标题和标签是C,但文件扩展名是cpp。您使用哪种语言?
  • @IanAbbott 实际上vowels 包含终止空字符作为未显式初始化的最后一个元素,而consonants 没有。

标签: c arrays string random


【解决方案1】:
  • scanf_s 将读取您输入的换行符。在%c%c之前添加一个空格,让函数跳过它们。
  • 您对strcat_s 的用法似乎很奇怪。该函数将接受三个参数,但您只传递了两个。在这种情况下,您可以只分配字符。
  • #include &lt;string&gt;using namespace std; 用于 C++,而不是 C,因此这里不使用它们。删除它们。
  • 您的main() 类型看起来很奇怪。

试试这个(对不起,我讨厌 VC++ 特定的功能):

#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;
}

【讨论】:

  • 我删除了“无效!”选项并添加中断;这似乎解决了这个问题。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 2011-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-24
  • 1970-01-01
  • 2014-02-09
  • 1970-01-01
相关资源
最近更新 更多