Почему не заканчивается цикл? - C (СИ)
Формулировка задачи:
При вводе нужного предложения и символа ставлю чтобы i=49, так как считаю, что при следующем заходе работа цикла прекратится. Пробовал воспользоваться break-ом, понял , что чего то я недопонимаю. Подскажите как исправить ошибку.
// Г„Г*Г* ГІГҐГЄГ±ГІ. ГЌГ*éòè Г*îìåð ïåðâîãî ГЇГ® ïîðÿäêó ñëîâГ*, êîòîðîå Г*Г*Г·ГЁГ*Г*ГҐГІГ±Гї // Г± Г§Г*Г¤Г*Г*Г*îãî ñèìâîëГ*. #include<stdio.h> #include<string.h> #include<stdlib.h> #include<clocale> #define PET 50 int main(){ char text[PET]; int i,k,y; int x,d; k=1; i=0; setlocale(LC_ALL,"Russian_russia.1251"); printf("Ââåäèòå ГІГҐГЄГ±ГІ\n"); gets(text); printf("\nÒåïåðü ââåäèòå ñèìâîë\n"); scanf("%d",&x); for(i=0;i<PET;i++){ if(i=0 && text[i]==x) {i=49;} if(text[i]==' ') { if(text[i+1]!=' ') { k++; if(text[i+1]==x) { i=49;}}}} printf("%d",k); }
Решение задачи: «Почему не заканчивается цикл?»
textual
Листинг программы
#include<stdio.h> #include<conio.h> #include<string.h> #include<locale.h> #define PET 50 int IsPresent(char* text,char x) { int i,si; si=1; for(i=0;i<PET && i<strlen(text);i++) { if(text[i]==x) // символ найден return si; if(text[i]==' ') // пробел переход к следующему слову si++; } return -1; } int main() { char text[PET]; int i,s; char x; setlocale(LC_ALL,"Russian_russia.1251"); printf("Введите текст\n"); gets(text); printf("\nТеперь введите символ\n"); scanf("%c",&x); s=IsPresent(text,x); if(s>=0) printf("Символ найден в слове%d",si); else printf("Символ не найден"); getch(); return 0; }
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы для работы с функциями ввода-вывода, строками и определениями макросов.
- Определяем макрос PET, который задает максимальное количество символов в тексте.
- Создаем функцию IsPresent, которая принимает два аргумента: текст, в котором ищется символ, и сам символ. Функция возвращает номер слова, в котором найден символ, или -1, если символ не найден. Внутри функции объявляем переменные i, si, которые будут использоваться в цикле.
- Запускаем цикл, который будет выполняться до тех пор, пока не будет найден символ или не будет достигнут конец текста. Переменная i используется для подсчета числа итераций цикла, а переменная si отслеживает количество слов, прошедших с момента последнего пробела.
- Если в тексте найден заданный символ, функция возвращает значение переменной si.
- Если в тексте встречается пробел, увеличиваем значение переменной si на 1.
- Если цикл закончился и символ не был найден, функция возвращает -1.
- В функции main() объявляем переменные text, i, s, x, которые будут использоваться в программе.
- Устанавливаем локальную настройку для вывода русского текста.
- Запрашиваем у пользователя ввод текста и сохраняем его в массив text.
- Запрашиваем у пользователя ввод символа для поиска.
- Получаем результат выполнения функции IsPresent, сохраняя его в переменную s.
- Если символ был найден, выводим сообщение с номером слова, в котором он был найден.
- Если символ не был найден, выводим соответствующее сообщение.
- Используем функцию getch() для приостановки выполнения программы до тех пор, пока пользователь не нажмет клавишу.
- Завершаем функцию main() и программу в целом.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д