Попробуйте изменить существительное единственного числа на множественное, используя структуру и функцию в программировании на С - PullRequest
0 голосов
/ 29 декабря 2018

Написать программу на основе следующих требований:

(i) Определить структуру с именем Noun, которая содержит строку с именем singular, а другую строку с именем множественного числа.

(ii) Написать функциюnamed множественное число, которое преобразует существительное в единственном числе во множественное число и сохраняет его во множественном числе в структурной переменной.Функция должна получить структуру в качестве выходного аргумента и ничего не возвращать.Правила преобразования существительного в единственном числе во множественное число приведены ниже:

'y' Замените его на 'ies'

's', 'ch', 'sh', 'x'Добавить 'es'

Другие Добавить 's'

(iii) Написать еще одну функцию с именем addNouns, которая откроет двоичный файл nouns.dat для добавления, и добавить в него некоторые существительные.Функция должна получить структурную переменную (как определено в (i) выше) в качестве входного аргумента и вернуть 1 (true), чтобы указать, что данные были успешно добавлены, или вернуть 0 (false) в противном случае.[Примечание: не добавляйте, если существительное найдено в двоичном файле.]

(iv) Ваша программа должна разрешать непрерывный запрос единственного существительного для преобразования, пока больше не будет доступных существительных.

* В7.Напишите программу для чтения данных из nouns.dat (созданного в Q6).Запишите данные из nouns.dat в текстовый файл nouns.txt, а также отобразите их на экране в формате, показанном ниже: Таблицы инструментов Церковных церквей Таблицы Таблицы Копирование Копий

Я использую MS Visual Studio2017 версия 15.9.4 продолжает давать мне ошибку, как синтаксическая ошибка!Но я не могу найти, что не так с моим кодом.Программа может записывать данные в двоичный файл, но когда я читаю эти данные в структурную переменную, это дает мне неизвестный символ ...

int addNouns(Noun *s);
void pluralize(Noun *noun);
typedef struct{
    char singular[30], plural[30];

}Noun;

void pluralize(Noun *noun)
{
    int len;
    FILE *f2;
    f2 = fopen("nouns.dat", "rb");
    if (f2 == NULL)
    {
      printf("Unable to open file!\n");
      exit(-1);
    }
    while (fread(&noun->singular, sizeof(noun->singular), 1, f2) != 0) {
        len = strlen(noun->singular);
        if (noun->singular[len - 1] == 'y')
        {
             noun->singular[len - 1] = 'i';
             noun->singular[len] = 'e';
             noun->singular[len + 1] = 's';
             *noun->plural = noun->singular;
        }
else if (noun->singular[len - 1] == 's' || noun->singular[len - 1] == 'ch' ||
noun->singular[len - 1] == 'sh' || noun->singular[len - 1] == 'x')
        {
            noun->singular[len - 1] = 'e';
            noun->singular[len] = 's';
            *noun->plural = noun->singular;
        }
        else {
            noun->singular[len - 1] = 's';
            *noun->plural = noun->singular;
        }
    }

}
int addNouns(Noun *s)
{

    char yon;
    FILE *f1;
    f1 = fopen("nouns.dat", "ab");
    printf("Do you want to enter nouns>");
    scanf("%c", &yon);
    while (toupper(yon) == 'Y') {
        printf("Enter a nouns(singular)>");
        scanf(" %[^\n]", &s->singular);
        fwrite(&s->singular, sizeof(s->singular), 1, f1);
        printf("Do you want to enter nouns>");
        scanf(" %c", &yon);

    }
    if (fwrite(&s->singular, sizeof(s->singular), 1, f1)==1)
        return 1;
    else
        return 0;

    fclose(f1);
}

void main()
{
    Noun noun;
    addNouns(&noun);
    pluralize(&noun);
    printf("Singular\t\tPlural\n");
    printf("%s\t\t%s", noun.singular, noun.plural);

    system("pause");
}

Надеюсь, что результат может быть таким, как показано ниже: ЦерковьЦеркви Наборы инструментов Наборы таблиц Таблицы Копии Копий

1 Ответ

0 голосов
/ 29 декабря 2018

В этом коде неправильно .

Прежде всего в строке:

noun->singular[len - 1] == 'sh' || noun->singular[len - 1] == 'x')

'' обозначаетchars 'sh' не символ, это строка, поэтому ее следует обозначать "sh"

Нельзя сравнивать строки с символами

Typedef Существительное вв самом начале, в противном случае прототипы функций не будут знать, на что вы ссылаетесь

typedef struct{
    char singular[30], plural[30];

}Noun;
int addNouns(Noun *s);
void pluralize(Noun *noun);

Вы не можете копировать подобные строки.* существительное-> множественное число = существительное-> единственное число;

Использование strncpy () для копирования строк из src в dest.

Реализация не является оптимальной

Почему вы используете текущую структуру вместо комбинации слово / суффикс?Также есть возможность переполнения буфера повсюду.Выделите память в куче.Не забудьте освободить их.

typedef struct{
    char *word, *suffix;
}Noun;

Надеюсь, это послужит ориентиром, в котором вы ошибаетесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...