我正在尝试编写一个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;
}
}
答案 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是整数而不是走这条路。