让字符串按输入增长

时间:2011-08-23 15:18:38

标签: c

以下问题:

我想制作一种刽子手游戏(控制台中的所有内容)。 所以我做了一个循环,在它用完之后转了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");


}

3 个答案:

答案 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);