Проверить, верно ли, что 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.
- Очищаем буфер ввода, считывая все символы до новой строки.
- Запрашиваем у пользователя строку.
- Разбиваем строку на слова и проверяем каждое слово на чётность его длины.
- Если длина текущего слова совпадает с номером слова, который указал пользователь, то проверяем, является ли эта длина чётной.
- Если длина слова чётная, то выводим сообщение о том, что слово имеет чётную длину.
- Если длина слова нечётная, то выводим сообщение о том, что слово имеет нечётную длину.
- Если длина слова совпадает с номером слова, который указал пользователь, и длина слова нечётная, то выводим соответствующее сообщение и завершаем цикл.
- Завершаем функцию и программу.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д