【问题标题】:how to print random letters from a set in c language in terminal?如何在终端中用c语言打印一组随机字母?
【发布时间】:2017-10-21 17:41:32
【问题描述】:

我想每 2 秒在终端上打印一个随机音符,以便在我的陶笛上练习。音符集是(A、B、C、D、E、F 和 G),这是我需要帮助的代码,因为我是编码新手。


  #include <stdio.h>
  #include <unistd.h>
   int main(){
              char A, B, C, D, E, F, G;
              char notes[7] = { A, B, C, D, E, F, G };

              while (1) {

                         printf("%c\n", notes);
                         sleep(2);

                         }
   }

编译时出现此错误。

warning:format ‘%c’ expects argument of type ‘int’, but argument 2 has type ‘char*’ [-Wformat=] printf("%c\n", notes);

当我将 printf 中的 %c 更改为 %s 时,我每 2 秒在终端“@”中得到所有信息,我做错了什么? 对于我的问题的另一部分,如何添加打印随机注释 我需要添加哪些代码?

【问题讨论】:

  • 查找srandrand
  • char notes[7] = { A, B, C, D, E, F, G }; 更改为char notes[] = { "ABCDEFG";
  • 一旦你弄清楚如何使用 rand,初始化一个变量 i,它获取 0 到 6 之间的随机数,以 notes[i] 访问数组
  • 您希望在C 中添加此内容的任何特殊原因?几乎任何其他流行语言都可以让这变得更加容易。
  • 双关语意外 — 请注意,变量 A..G 未初始化,因此当您使用它们的值初始化 notes 数组时,您使用的是不确定的值。不是很好。你真的不需要单独的变量。你确实需要使用rand()——也可能是srand(),但只需要使用call srand() once——或者相当于生成新值的东西。您将一个字符数组(相当于,指向char 的指针)传递给printf();你告诉它你将通过char。当你撒谎时,事情就不好办了。

标签: c arrays random printf


【解决方案1】:

你不需要单独声明char变量,只需用你想要的注释初始化你的数组。

然后,为了记第一个音符,你需要做notes[0],第二个notes[1],第三个notes[2],...,最后一个notes[sizeOfArray - 1]。因此,一般情况下,您可以通过 notes[i] 访问数组的第 i 个元素,其中索引从 0 开始。

所以,您不能使用printf("%c\n", notes);,因为%c 需要一个字符,而notes 是一个字符数组(可以说是一个刺痛)。如果您使用%s,它将打印整个字符串,但我们不希望这样。

如果我们想打印数组的第一个字符,我们会这样做:

printf("%c\n", notes[0]);

现在,我们想要随机访问数组,因此我们不想要 0,而是随机的,这将在允许的范围内(我们必须小心不要超出范围)。所以,这将是一件好事:

printf("%c\n", notes[randomIndex]);

您可以通过函数调用替换 randomIndex,这将返回一个随机索引,就像下面的 randomRange()

例子:

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

int randomRange(int min, int max)
{
    return ( rand() % ( max - min + 1 ) ) + min;
}

int main(void)
{
    srand( (unsigned int)time ( NULL ) );
    const int size = 7;
    char notes[] = { 'A', 'B', 'C', 'D', 'E', 'F', 'G' };
    for(int i = 0; i < 5; ++i) {
        printf("%c\n", notes[randomRange(0, size - 1)]);
        sleep(2);
    }
    return 0;
}

输出:

D
F
A
G
G

【讨论】:

  • 谢谢你帮了我很多,我会研究所有这些代码(这是我第一次看到它们)
猜你喜欢
  • 1970-01-01
  • 2018-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多