【问题标题】:Getting input as string and Printing以字符串形式获取输入并打印
【发布时间】:2016-08-05 11:51:28
【问题描述】:

我正在尝试编写一个 mastermind 程序,但我被字符串输入困住了。我尝试让用户猜测,当我尝试打印它时它给出错误我不知道为什么这是程序的那部分

char* UserGuess[4];

void *Guess()
{
    long i;
    printf("Enter your guess: ");
    for(i=0;i<4;i++)
    {
        fgets(UserGuess, 4, stdin);

    }
    return UserGuess;       
}   
int main()
{
    int userchoice=0, i;    

    while(userchoice!=2)
    {

        Guess();
        printf("%s\n", UserGuess[0]);
        break;
    }
}

【问题讨论】:

  • userchoice 在你的循环中完全没有改变。并且对Guess() 的调用是无用的,因为您忽略了返回值。 UserGuess 是一个指针数组,但您似乎将它用作数组。您的代码中有太多基本问题。最好阅读一本合适的教科书。
  • 此时用户选择无关紧要我只是在尝试程序,为什么guess函数没有用它正在将数据记录到数组中并且数组被定义为全局变量

标签: c string input


【解决方案1】:

让我们看看这两行:

char* UserGuess[4];

fgets(UserGuess, 4, stdin);

第一个声明并将UserGuess 定义为一个由四个指向char 的指针组成的数组。 IE。作为四个字符串。

第二个尝试将其用作char 的数组,即单个字符串。

这是错误的,你可能想要类似的东西

for (unsigned i = 0; i < 4; ++i)
    fgets(UserGuess[i], SOME_SIZE, stdin);

这当然会导致另一个问题,因为UserGuess 中的所有指针都将是空指针(全局变量是零初始化的,这意味着指针变为NULL)。所以你也必须改变数组定义:

char UserGuess[4][SOME_SIZE];

或者你只想要一个三个字符的字符串(加上终止符)?然后你应该将数组的定义更改为

char UserGuess[4];

并将输出更改为例如

printf("%s\n", UserGuess);

然后在一些相关的注释中,fgets 函数读取换行符并可能将其添加到字符串中(如果合适的话)。

【讨论】:

  • 感谢您的评论,我按照您所说的进行了更改,但我希望用户输入四种颜色;红色 绿色 黑色 白色 按下输入,它将存储在字符串中,当我像 userchoice[0] 打印它时将等于红色。是否可以使用上面给定的代码来做到这一点?
  • @HasanBilalAdak 然后看我回答的第一部分。
【解决方案2】:

在您的代码中,UserGuess 是指向char 的指针数组,但所有元素都是无效 (NULL)。您需要先为他们分配内存,然后才能写入团队。

也就是说,使用fgets(),您需要传递数组的各个元素。

类似

char UserGuess[4][32];

for(i=0;i<4;i++)
{
    fgets(UserGuess[i], 32, stdin);

}   

可能是一个好的开始。

【讨论】:

    【解决方案3】:

    您可能可以使用 scanf("%d",&n) 其中 n 是一个整数,而不是走这条路线。

    【讨论】:

      猜你喜欢
      • 2020-10-11
      • 1970-01-01
      • 2017-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多