Выход из цикла происходит раньше, чем предполагалось - C (СИ)
Формулировка задачи:
#include<iostream>
using namespace std;
void main()
{
char ar[256]={"1234567890qwertyuiop"},m='3',n='u';
cout<<ar<<'\n';
for (int i=0,j=0;;i++)
{
if (ar[i]>=m){
j++;
}
if(ar[i]>=n){
cout<<j;
break;
}
}
}
считает всего 9 символов должно быть 14 или 15
В строке if(ar[i]>=n)
заменил >= на ==
посчитало правильно.
На будущее, все же почему если я непосредственно указую = или > 'u' срабатывает раньше?
Решение задачи: «Выход из цикла происходит раньше, чем предполагалось»
textual
Листинг программы
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
void main ()
{
char ar[25],br[25]={'\0'},m,n,*a=&ar[0],*b=&br[0];
gets(ar);
cout<<"Enter beginning new line= ";
cin>>m;
cout<<"Enter conclusion= ";
cin>>n;
for (int i=0,j=0;i<20;i++){
if (ar[i]==m)
do{
j++;
}while (a[j]!=n);
if(ar[i]==m){
strncat(b,&ar[i],j);
break;
}
}
cout<<br<<"\n";
}
Объяснение кода листинга программы
- Подключение необходимых библиотек
- Объявление переменных: массив символов ar, br, m, n, указатели a и b на начало массивов ar и br соответственно
- Ввод данных с клавиатуры: строки m и n, затем 20 символов строки ar
- Цикл for с условием остановки i<20. Внутри цикла проверяется условие ar[i]==m
- Если условие выполняется, то начинается цикл do-while, который выполняется до тех пор, пока a[j] не станет равным n. При каждой итерации do-while значение j увеличивается на 1
- Если условие ar[i]==m выполняется, то значение j присваивается переменной i, и цикл for прерывается с помощью оператора break
- Функция strncat используется для добавления подстроки от ar[i] до n в строку b. В качестве третьего аргумента функции передается смещение от начала строки b, на которое будет добавлена подстрока
- Вывод результата на экран с помощью cout
- Оператор
\nиспользуется для перехода на новую строку - Ввод данных с клавиатуры и вывод результата на экран будут повторяться до тех пор, пока не будет достигнуто условие остановки i<20