Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
-Arabella-
0 / 0 / 0
Регистрация: 20.10.2013
Сообщений: 233
#1

Зацикливание при сравнении строк - C++

14.05.2014, 21:43. Просмотров 277. Ответов 8
Метки нет (Все метки)

Добрый вечер. У меня возникла проблема при сравнивании строк, после сравнивания происходит расчет по циклу [j] и далее по идее должно переходить к циклу по [i], но программа зацикливается на [j] здесь, вечно накапливает k и ничего толкового не считает. Почему зацикливается?
C++ (Qt)
1
2
3
4
5
6
7
8
9
if(strcmp(sell[i].FIO,sell[j].FIO)==0 && sell[j].FIO!="\0")
{
k++;
strcpy(sell[j].FIO,"\0");
st.at=st.at+sell[j].at;
st.ves=st.ves+sell[j].ves;
st.shtuk=st.shtuk+sell[j].shtuk;
st.time=st.time+sell[j].time;
}
Код всей функции
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
void output()
{
seller st;
char filename[]="sellers.dat";
int n;
FILE *f;
clrscr();
f=fopen(filename,"rb+");
if(f)
{
fseek(f,0,SEEK_END);
n=ftell(f)/sizeof(seller);
seller* sell=new seller [n];
fseek(f,0,SEEK_SET);
 
   fread(&sell,sizeof(seller),n,f);
   printf("\n FIO | Weight Things | Time | Service Time Of One Purchase ");
for(int i=0;i<n-1;i++)
{
int k=1;
st.at=sell[i].at;
st.ves=sell[i].ves;
st.shtuk=sell[i].shtuk;
st.time=sell[i].time;
for(int j=i+1;j<n;j++)
{
if(strcmp(sell[i].FIO,sell[j].FIO)==0 && sell[j].FIO!="\0")
{
k++;
strcpy(sell[j].FIO,"\0");
st.at=st.at+sell[j].at;
st.ves=st.ves+sell[j].ves;
st.shtuk=st.shtuk+sell[j].shtuk;
st.time=st.time+sell[j].time;
}
st.at=st.at/k;
}
printf("\n %25s/%2d/%2d/%f/%5.2f",st.FIO,st.ves,st.shtuk,st.time,st.at);
}
}
printf("Press any key");
getch();
fflush(stdin);
fclose(f);
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.05.2014, 21:43     Зацикливание при сравнении строк
Посмотрите здесь:

Зацикливание при сравнении двоичных чисел - C++
На вход идет текстовый файл с 1 целым числом. Это число нужно перевести в двоичную систему счисления и биты сдвигать вправо до тех...

Проблемы с кодировкой при сравнении строк - C++
Здравствуйте! Мне, нужно сравнить две строки: одну получаю get запросом(на сайте кодировка windows 1251), а вторая указывается...

Не срабатывает условие при сравнении строк типа string - C++
Здравствуйте! Не срабатывает условие if() при сравнении двух строк типа string, использую функцию strcmp() Т.е. если выполнится этот код:...

Ошибка при сравнении символов - C++
1) НЕ могу понять в чем ошибка при сравнении символов вот пример одной: Энтропия.cpp(18): error C2446: ==: нет преобразования &quot;const...

Ошибка при сравнении введённых данных - C++
Я очень долго пытался решить эту трабл но так и не понял даже ее суть( Суть данного компонента в том что есть 2 массива из которых...

Ошибка при сравнении типа char - C++
#include &lt;cstdlib&gt; #include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;string&gt; using namespace std; int main(int argc, char...

Массивы. Движение при сравнении значений индекса - C++
Задание: Написать программу, которая находит в массиве значения, повторяющиеся два и более раз, и показывает их на экран. Поиском находил...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
14.05.2014, 22:06     Зацикливание при сравнении строк #2
Цитата Сообщение от -Arabella- Посмотреть сообщение
Почему зацикливается?
С первого взгляда никакого зацикливания быть не должно: i,j растут постоянно, n не меняется в цикле.
Что в исходном файле sellers.dat ?
-Arabella-
0 / 0 / 0
Регистрация: 20.10.2013
Сообщений: 233
15.05.2014, 06:01  [ТС]     Зацикливание при сравнении строк #3
Tulosba,
Цитата Сообщение от Tulosba Посмотреть сообщение
Что в исходном файле sellers.dat ?
Ну по идеи должны быть структуры: фамилия и 4 цифирки, но в него записывается ерунда, вот я и искала ошибку с помощью F7 в функции вывода и после if постоянно возвращается на if, намного больше раз, чем структур
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
15.05.2014, 07:45     Зацикливание при сравнении строк #4
-Arabella-, чему в 13 строке равно n?
В 16 строке нужно убрать &.
zss
Модератор
Эксперт С++
6321 / 5905 / 1913
Регистрация: 18.12.2011
Сообщений: 15,186
Завершенные тесты: 1
15.05.2014, 08:31     Зацикливание при сравнении строк #5
Цитата Сообщение от -Arabella- Посмотреть сообщение
if(strcmp(sell[i].FIO,sell[j].FIO)==0 && sell[j].FIO!="\0")
sell[j].FIO!="\0" - это проверка того, что адрес строки sell[j].FIO не совпадает с адресом
константной строки, не содержащей текста.
Полагаю, что Вы имели ввиду sell[j].FIO[0]!=0 или (что то же самое) strlen(sell[j].FIO)!=0
-Arabella-
0 / 0 / 0
Регистрация: 20.10.2013
Сообщений: 233
15.05.2014, 09:25  [ТС]     Зацикливание при сравнении строк #6
Tulosba, n вычисляется в 12, n - количество структур. А почему в 16 нужно убрать &?
zss, я хотела сделать проверку не пустая(нулевая) ли эта строка, потому что если строки совпадают и чтоб потом опять с этой строкой не сравнивать я ее делаю нулевой(пустой), мне все убрать ковычки и слэш?
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
15.05.2014, 10:56     Зацикливание при сравнении строк #7
Цитата Сообщение от -Arabella- Посмотреть сообщение
А почему в 16 нужно убрать &?
Потому что fread принимает адрес начала памяти, куда будет производится чтение. И этот адрес - это sell, полученный в 13 строке. А вовсе не адрес переменной sell, который получается, если написать &sell.
Для проверки что строка не пустая можно использовать такой код:
C++
1
if( *str )
А если обезопасить себя от нулевого указателя, то такой:
C++
1
if( str && *str )
zss
Модератор
Эксперт С++
6321 / 5905 / 1913
Регистрация: 18.12.2011
Сообщений: 15,186
Завершенные тесты: 1
15.05.2014, 11:29     Зацикливание при сравнении строк #8
Цитата Сообщение от -Arabella- Посмотреть сообщение
мне все убрать ковычки и слэш?
Да, и сравнивать не адрес, а нулевой элемент массива:
C++
1
if(strcmp(sell[i].FIO,sell[j].FIO)==0 && sell[j].FIO[0]!=0)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.05.2014, 00:25     Зацикливание при сравнении строк
Еще ссылки по теме:

Не верно работает strcmp при сравнении двух слов - C++
Добрый вечер уважаемые программисты! В общем проблема в следующем, надо из файла F1 скопировать все строки в F2 в которых нет повторяющихся...

Ошибка при сравнении элемента динамического массива с числом - C++
Здравствуйте! При попытке сравнения элемента двухмерного динамического массива с числом возникает критическая ошибка в момент выполнения...

Зацикливание программы при вводе - C++
Добрый день. У меня почему то происходит зацикливание программы при вводе строки с пробелами. Есть структураstruct sklad { char...

Зацикливание при чтении из файла - C++
Пытаюсь читать из файла данные,сохраненные из Экселя TempBook-&gt;SaveAs(PathFile+&quot;\\&quot;+&quot;Temp&quot;,Excel::xlCSV , &amp;vtMissing, &amp;vtMissing,...

Зацикливание при вводе из файла - C++
требуется ввести из файла в вектор данные типа float. программа зацикливается при выводе целой части вещественного числа. #include...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
-Arabella-
0 / 0 / 0
Регистрация: 20.10.2013
Сообщений: 233
16.05.2014, 00:25  [ТС]     Зацикливание при сравнении строк #9
Tulosba, zss, Спасибо))) Заработало
Yandex
Объявления
16.05.2014, 00:25     Зацикливание при сравнении строк
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru