Проверить, верно ли, что k-ое слово имеет четную длину? - C (СИ)
Формулировка задачи:
Помогите, пожалуйста, найти ошибку в программе.
Ошибка программы в том, что если например ввести строку "101 101 10 101" и натуральное число 1, то она всегда говорит "Верно". Хотя число нечетное. Такое чувство, что просто введи любую строку и натуральное число 1 - программа выдаст всегда "Верно"
Само задание звучит так:
Дана символьная строка и целое число k. Слово - последовательность символов между пробелами, не содержащая пробелы внутри себя. Проверить, верно ли, что в заданной строке k-ое слово имеют четную длину?
Листинг программы
- { int k,i,flag;
- char s[255];
- do
- {
- printf("Введите натуральное число: ");
- scanf("%d", &k);
- } while (k<=0);
- char *ptr=strtok(s, " ");
- i=0;
- flag=0;
- while (ptr!=NULL)
- {
- i++;
- printf("%s\n", ptr);
- if (i==k && strlen(ptr) %2 == 0) flag=1;
- ptr=strtok(0, " ");
- }
- if (flag==1) printf("Верно\n");
- else printf("Не верно\n");
- return 0
- }
Решение задачи: «Проверить, верно ли, что k-ое слово имеет четную длину?»
textual
Листинг программы
- //В Code:Blocks локаль, к сожалению, не работает, учтите.
- #include <stdio.h>
- #include <string.h>
- #include <locale.h>
- #define N 256
- #define D " \n"
- int main(void)
- {
- setlocale(LC_ALL,"RU");
- int k,i;
- char s[N];
- char *ptr;
- while(1)
- {
- printf("Введите номер слова: ");
- scanf("%d",&k);
- if(k==-1)break;// Выходим из цикла набрав -1
- while(getchar()!='\n');// Очищаем буфер(обязательно!)
- printf("Введите строку: ");
- fgets(s,N,stdin);
- for(i=1,ptr=strtok(s,D);ptr!=NULL;ptr=strtok(NULL,D),i++)
- {
- if(i==k)
- {
- if(strlen(ptr)%2==0)
- printf("Верно! Слово имеет чётную длину.\n");
- else
- printf("Не верно! Слово имеет не чётную длину.\n");
- break;
- }
- }
- }
- return 0;
- }
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы для работы с функциями ввода-вывода и строками.
- Определяем константы: количество слов в строке (N), разделитель слов (D).
- Устанавливаем локаль на русский язык.
- Объявляем переменные: — k — номер слова; — i — счётчик слов; — s — строка, в которой находятся слова; — ptr — указатель на текущее слово.
- Запускаем цикл, который продолжается до тех пор, пока пользователь не введёт -1.
- Очищаем буфер ввода, считывая все символы до новой строки.
- Запрашиваем у пользователя строку.
- Разбиваем строку на слова и проверяем каждое слово на чётность его длины.
- Если длина текущего слова совпадает с номером слова, который указал пользователь, то проверяем, является ли эта длина чётной.
- Если длина слова чётная, то выводим сообщение о том, что слово имеет чётную длину.
- Если длина слова нечётная, то выводим сообщение о том, что слово имеет нечётную длину.
- Если длина слова совпадает с номером слова, который указал пользователь, и длина слова нечётная, то выводим соответствующее сообщение и завершаем цикл.
- Завершаем функцию и программу.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д