Проверить, верно ли, что k-ое слово имеет четную длину? - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Помогите, пожалуйста, найти ошибку в программе.

Само задание звучит так:

Дана символьная строка и целое число k. Слово - последовательность символов между пробелами, не содержащая пробелы внутри себя. Проверить, верно ли, что в заданной строке k-ое слово имеют четную длину?
Листинг программы
  1. { int k,i,flag;
  2. char s[255];
  3. do
  4. {
  5. printf("Введите натуральное число: ");
  6. scanf("%d", &k);
  7. } while (k<=0);
  8. char *ptr=strtok(s, " ");
  9. i=0;
  10. flag=0;
  11. while (ptr!=NULL)
  12. {
  13. i++;
  14. printf("%s\n", ptr);
  15. if (i==k && strlen(ptr) %2 == 0) flag=1;
  16. ptr=strtok(0, " ");
  17. }
  18. if (flag==1) printf("Верно\n");
  19. else printf("Не верно\n");
  20. return 0
  21. }
Ошибка программы в том, что если например ввести строку "101 101 10 101" и натуральное число 1, то она всегда говорит "Верно". Хотя число нечетное. Такое чувство, что просто введи любую строку и натуральное число 1 - программа выдаст всегда "Верно"

Решение задачи: «Проверить, верно ли, что k-ое слово имеет четную длину?»

textual
Листинг программы
  1. //В Code:Blocks локаль, к сожалению, не работает, учтите.
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <locale.h>
  5. #define N 256
  6. #define D " \n"
  7. int main(void)
  8. {
  9.   setlocale(LC_ALL,"RU");
  10.   int k,i;
  11.   char s[N];
  12.   char *ptr;
  13.   while(1)
  14.   {
  15.     printf("Введите номер слова: ");
  16.     scanf("%d",&k);
  17.     if(k==-1)break;// Выходим из цикла набрав -1
  18.     while(getchar()!='\n');// Очищаем буфер(обязательно!)
  19.     printf("Введите строку: ");
  20.     fgets(s,N,stdin);
  21.      for(i=1,ptr=strtok(s,D);ptr!=NULL;ptr=strtok(NULL,D),i++)
  22.      {
  23.        if(i==k)
  24.        {
  25.          if(strlen(ptr)%2==0)
  26.            printf("Верно! Слово имеет чётную длину.\n");
  27.          else
  28.            printf("Не верно! Слово имеет не чётную длину.\n");
  29.          break;
  30.        }
  31.      }  
  32.   }
  33.     return 0;
  34. }

Объяснение кода листинга программы

  1. Включаем необходимые заголовочные файлы для работы с функциями ввода-вывода и строками.
  2. Определяем константы: количество слов в строке (N), разделитель слов (D).
  3. Устанавливаем локаль на русский язык.
  4. Объявляем переменные: — k — номер слова; — i — счётчик слов; — s — строка, в которой находятся слова; — ptr — указатель на текущее слово.
  5. Запускаем цикл, который продолжается до тех пор, пока пользователь не введёт -1.
  6. Очищаем буфер ввода, считывая все символы до новой строки.
  7. Запрашиваем у пользователя строку.
  8. Разбиваем строку на слова и проверяем каждое слово на чётность его длины.
  9. Если длина текущего слова совпадает с номером слова, который указал пользователь, то проверяем, является ли эта длина чётной.
  10. Если длина слова чётная, то выводим сообщение о том, что слово имеет чётную длину.
  11. Если длина слова нечётная, то выводим сообщение о том, что слово имеет нечётную длину.
  12. Если длина слова совпадает с номером слова, который указал пользователь, и длина слова нечётная, то выводим соответствующее сообщение и завершаем цикл.
  13. Завершаем функцию и программу.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.778 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы