以下问题:
我想制作一种刽子手游戏(控制台中的所有内容)。 所以我做了一个循环,在它用完之后转了13次,玩家松动了(如果玩家插入了错误的字母,它只会倒计时)。 现在,我想向用户显示他已经使用过哪些字母。因此输出应该如下所示:“你已经使用过了:a,b,c,g ......”等等。因此,每次尝试后,该行增长一个字母(当然是输入字母)。 我尝试过strcpy,但它只会制作我从未输入的随机字母,并且它不会增长,所以我该如何处理呢?
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
#include <ctype.h>
void gotoxy(int x, int y)
{
COORD coord;
coord.X = x;
coord.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}
int main()
{
char word[81], used[14];
int wrong=0, laenge, _, i;
char input;
SetConsoleTitle(" Guess me if u Can! ");
//printf("\n\n spielst du mit einem Freund oder alleine?"); /*for later
//printf(" \n\n [1] alleine"
// " \n\n [2] mit einem Freund"); */
printf("\n\n please insert a word (max. 80 characters): \n\n");
gets(word);
laenge=strlen(word);
printf("\n\n this word has %i characters.\n\n",laenge);
for(i=0; i<13; i++)
{
// for(_=0; _<laenge; _++) /*ignore this this is also for later
// printf(" _");
// printf("\n"); */
gotoxy(10,10);
printf("\n\n please insert a letter now: ");
input=getch();
strcpy(used, &input);
printf("\n\n The following characters are allready used: %c ", used);
if(strchr(word, input)){
printf("\n\n %c is in the word\t\t\t\t\t\t\n\n");
i--;
}
else{
printf("\n\n the letter %c is wrong!\n");
wrong++;
printf(" you have %i try",13-wrong);
}
}
system("cls");
printf("\n\n to many tries.\n\n");
system("Pause");
}
答案 0 :(得分:2)
首先,您应该用{0}字符填充used
以确保它始终正确终止:
memset(used, 0, 14);
然后,像这样添加一个新角色:
used[i] = input;
另外,正如@Fred所说,您应该在%s
电话中使用正确的格式说明符printf
。
答案 1 :(得分:1)
如前所述,您应该使用零填充,例如used[14] = {0};
然后我认为行printf("\n\n The following characters are allready used: %c ", used);
应为printf("\n\n The following characters are allready used: %s ", used);
,注意您正在打印字符串的“%s”。
答案 2 :(得分:0)
如果您知道最大大小,则可以创建具有该最大大小的缓冲区,然后附加到该缓冲区。在这种情况下,您确实知道最大尺寸,因为字母表中只有26个字母。因此,字符串的最大长度是您在开头放置的任何文本的长度,加上每个字母使用的字符数的26倍。我在初始字符串中计数18。请记住在末尾为空字节终结符添加一个。对于每个字母,你有字母,逗号和空格,所以如果算术正确,最大长度为18 + 26 * 3 + 1 = 97。
所以你可以这样写:
char used[96];
strcpy(used,"You already used: ");
int first=TRUE;
... whatever other work ...
... let's say we get the character in variable "c" ...
// Add comma after previous entry, but only if not first
if (!first)
{
first=FALSE;
strcat(used,", ");
}
// turn character into a string
char usedchar[2];
usedchar[0]=c;
usedchar[1]='\0';
// Append to working string
strcat(used,usedchar);