Пусть строка растет при вводе - PullRequest
0 голосов
/ 23 августа 2011

следующая проблема:

Я хочу сделать что-то вроде палача (все в консоли). поэтому я сделал цикл, который поворачивается 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 ]

2 голосов
/ 23 августа 2011

Во-первых, вы должны заполнить used 0 символами, чтобы убедиться, что оно всегда правильно завершено:

memset(used, 0, 14);

Затем добавьте к нему нового персонажа, например:

used[i] = input;

Также, как заметил @Fred, вы должны использовать правильный спецификатор формата %s в вызове printf.

1 голос
/ 23 августа 2011

Как уже было сказано, вы должны заполнить использованные нули, что-то вроде 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", который вы печатаете.

0 голосов
/ 23 августа 2011

Если вы знаете максимальный размер, вы можете создать буфер с этим максимальным размером, а затем добавить к нему. В этом случае вы знаете максимальный размер, так как в алфавите всего 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...