获取输入为字符串和打印

时间:2016-08-05 11:51:28

标签: c string input

我正在尝试编写一个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;
    }
}

3 个答案:

答案 0 :(得分:1)

让我们看看这两行:

char* UserGuess[4];

fgets(UserGuess, 4, stdin);

第一个声明并将UserGuess定义为包含char 的四个指针的数组。即作为四个字符串。

第二个尝试将它用作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函数读取换行符并可能将其添加到字符串中(如果适合)。

答案 1 :(得分:0)

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

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

这样的东西
char UserGuess[4][32];

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

}   

可以是一个好的开始。

答案 2 :(得分:0)

你可以使用scanf(“%d”,&amp; n),其中n是整数而不是走这条路。