Невозможно сравнить строки в массиве во время цикла - PullRequest
0 голосов
/ 04 января 2019

В настоящее время я работаю над своим последним тестом в этом семестре в моем университете.Я думаю о создании программы, которая будет сравнивать слова в массиве.Если есть слово, которое совпадает с предыдущими введенными словами, программа завершится.

Но я все еще не могу понять, как это сделать.

Я пытался изменить j,я и настраиваю функцию strcmp, но до сих пор не получил ответа.

#include <stdio.h>
#include <string.h>

int main(void)
{
    int a, i, j, ret;
    char kt[255][255];

    printf("\t\t\t\tPlayers: ");
    scanf("%d", &a);

    for(i=0;i<a;i++)
    {
        printf("\t\t\t\tPlayer %d: ", i+1);
        scanf(" %[^\n]s", kt[i]);

        if(i==0)
        {
            continue;
        }

        for(j=i+1;j<a;j++)
        {
            ret=strcmp(kt[i],kt[j]);
            if(ret==0)
            {
                printf("\t\t\t\tPlayer %d, You lose!\n", j+1);
                break;
            }
        }
    }
    printf("\t\t\t\tEnd Game\n");
}

Я ожидаю, что результат будет выглядеть как

Players: 4
Player 1: Test
Player 2: Test1
Player 3: Test
End Game

Но я получаю

Players: 4
Player 1: Test
Player 2: Test1
Player 3: Test
Player 4: Test
End Game

Ответы [ 2 ]

0 голосов
/ 04 января 2019

Вы должны проверить от первого элемента = 0 до текущего - я:

#include <stdio.h>
#include <string.h>

int main(void)
{
    int a, i, j, ret;
    char kt[255][255];

    printf("\t\t\t\tPlayers: ");
    scanf("%d", &a);

    for(i=0;i<a;i++)
    {
        printf("\t\t\t\tPlayer %d: ", i+1);
        scanf(" %[^\n]s", kt[i]);

        if(i==0)
        {
            continue;
        }

        for(j=0;j<i;j++)
        {
            ret=strcmp(kt[i],kt[j]);
            if(ret==0)
            {
                printf("\t\t\t\tPlayer %d, You lose!\n", i+1);
                goto exit;
            }
        }
    }

    exit:
    printf("\t\t\t\tEnd Game\n");
}
0 голосов
/ 04 января 2019

Вы не правильно делаете цикл for(j=0;j<i;j++) вместо for(j=i+1;j<a;j++).

Вы также должны разорвать внешнюю петлю

#include <stdio.h>
#include <string.h>

int main(void)
{
    int a, i, j, ret,flag=0;
    char kt[255][255];

    printf("\t\t\t\tPlayers: ");
    scanf("%d", &a);

    for(i=0;i<a;i++)
    {
        printf("\t\t\t\tPlayer %d: ", i+1);
        scanf(" %[^\n]s", kt[i]);

        if(i==0)
        {
            continue;
        }

    // from j=0 to j< i to compare all previous entries
        for(j=0;j<i;j++)
        {
            ret=strcmp(kt[i],kt[j]);
            if(ret==0)
            {
                printf("\t\t\t\tPlayer %d, You lose!\n", i+1);
                flag=1;  // using break will only break this loop so use flag to break next loop also
                break;
            }
        }
    if (flag==1){
        break;
    }
    }
    printf("\t\t\t\tEnd Game\n");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...