Программирование на C: от единственного до существительного во множественном числе - PullRequest
0 голосов
/ 30 августа 2011

здесь предполагается, что моя программа

Напишите программу, которая принимает существительные и формирует их множественные числа на основе правил:

  1. Если существительное оканчивается на «у», удалите«y» и добавьте «ies».
  2. Если существительное оканчивается на «s», «c», «ch» или «sh», добавьте «es».
  3. Во всехв других случаях просто добавьте «s».

Напечатайте каждое существительное и его множественное число.

Это работает нормально, когда я ввожу такое слово, как молочные, оно печатает молочные, но оно зацикливаетсяпечатает dairieseseseseseseseseseseses ... и так далее.Я надеялся, что это быстрое решение, которое я не могу найти, и кто-то может помочь мне с этим!

Спасибо!

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



#define max_word 20



/* prototypes */
void pluralize (char word[]);


int main (void)
{ 
  char noun[max_word];   /* stores temporary word entered by user */

  printf("Enter a noun in singular form: ");
  scanf("%s", noun);

  while (strcmp(noun, "done") != 0)
 {
    pluralize (noun);
    printf("The plural form is %s\n", noun);
 }

  return;
}

void pluralize (char word[])
{
  int length;
  char noun;
  length=1;
  length = strlen(word);

   if (word[length - 1] == 'y') 
 {   word[length - 1] = 'i';
     word[length] = 'e';
    word[length + 1] = 's';
    word[length + 2] = '\0';  
  }


  /* if word ends in "s" "ch" or "sh" add "es" */

 else if (word[length - 1] == 's' ||
    (word[length - 2] == 'c' && word[length - 1] == 'h') ||
    (word[length - 2] == 's' && word[length - 1] == 'h'))
  {  strcat(word, "es");
  }

  else
 {   strcat(word, "s");

    printf("New word is: ", &noun);
} 
return;
}

1 Ответ

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

Я предполагаю, что вы хотите, чтобы программа завершилась, если пользователь вводит текст done.Если это так, вам нужно исправить цикл:

for (;;) 
{
    printf("Enter a noun in singular form: ");
    scanf("%s", noun);

    if ((strcmp(noun, "done") == 0)
        break;

    pluralize (noun);
    printf("The plural form is %s\n", noun);
}

Текущая версия будет зацикливаться, пока pluralize() не установит строку в done, что никогда не произойдет.

В качестве стороныобратите внимание, вы должны использовать strncmp() и strncat(), чтобы избежать потенциального переполнения буфера.Это не так важно в коде такого типа, но если вы когда-нибудь пишете что-то, что сталкивается с ненадежным пользователем, вы можете открыть себя для серьезной уязвимости безопасности, используя strcmp() и strcat().

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