Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
5 / 5 / 2
Регистрация: 30.01.2012
Сообщений: 153

Сравнение строк. If работает не так, как предполагается

23.04.2013, 17:59. Показов 1308. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрые люди)
спасите и помогите.

Разбила уже код как только могла. При вводе любого числа выдает ошибку, так как в процедуре obrabotka начинает ветвь else, а не первую, которую и нужно.

В чем причина? Всем заранее спасибо и извините за корявый код новичка)

C++
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
obrabotka(char el[3])
{      char f[3]="0";
        char g[3]="9";
  if ((el>=f) && (el<=g))
  {
      int y=StrToInt(el);
      include(stiva,y);
      }
      else
        { cout<<el;
        op1=extrage(stiva);
        op2=extrage(stiva);
 
        switch (el[1]) {
        case '+': rez=op1+op2;
        case '-': rez=op2-op1;
        case '*': rez=op1*op2;
        case '/': rez=op2%op1;
        }
    include(stiva,rez);
    }
    cout<<rez<<"\n";
}
//---------------------------------------------------------------------------
 
#pragma argsused
 main(int argc, char* argv[])
{
cout<<"Vvedite elementi. Posle zaverwenia vvoda vvedite S\n";
 
while ((el!="S") || (el!="s")){
  gets(el);
  obrabotka(el);
 
 }
        getch();
        }
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.04.2013, 17:59
Ответы с готовыми решениями:

Сравнение строк. что не так?
сравниваю строки из listBox и пишу их в другой listBox, но как-то сравнение не работает... ArrayList MPI_Send_Array = new...

Перестановка строк в двумерном массиве работает не так как следует
Ребят, всем привет, у меня такая проблема, не могу с ней справится. Дана целочисленная прямоугольная матрица. Определить количество...

Сравнение двух строк - что я делаю не так?
OPTIONS=/path/to/file { read ACTION read ARCHIV_NAME }&lt;$OPTIONS if then 'ACTION TRUE' &gt;&gt; &quot;$BACKUP_BASE_DIR$LOG_FILE&quot; else ...

11
 Аватар для Lelik-pahan
1703 / 899 / 207
Регистрация: 25.11.2009
Сообщений: 1,848
23.04.2013, 18:43
может
C++
1
2
3
char f[3]="0";
        char g[3]="9";
  if ((el>=f) && (el<=g))
заменить на
C++
1
if ((StrToInt(el) >= 0) && (StrToInt(el) <= 9))
?
0
5 / 5 / 2
Регистрация: 30.01.2012
Сообщений: 153
23.04.2013, 18:58  [ТС]
Цитата Сообщение от Lelik-pahan Посмотреть сообщение
может
C++
1
2
3
char f[3]="0";
        char g[3]="9";
  if ((el>=f) && (el<=g))
заменить на
C++
1
if ((StrToInt(el) >= 0) && (StrToInt(el) <= 9))
?
помогло. спасибо большое. но теперь другая ошибка.
при вводе знака выдает следующую ошибку. вроде бы ввод символов был предусмотрен(
0
 Аватар для Lelik-pahan
1703 / 899 / 207
Регистрация: 25.11.2009
Сообщений: 1,848
23.04.2013, 19:05
Цитата Сообщение от olea Посмотреть сообщение
при вводе знака выдает следующую ошибку. вроде бы ввод символов был предусмотрен(
ничего не понятно ) Приведите текст ошибки. И, если можно, скажите на какой строке возникает
0
5 / 5 / 2
Регистрация: 30.01.2012
Сообщений: 153
23.04.2013, 19:09  [ТС]
Цитата Сообщение от Lelik-pahan Посмотреть сообщение
ничего не понятно ) Приведите текст ошибки. И, если можно, скажите на какой строке возникает
Вот весь код

C++
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
//---------------------------------------------------------------------------
 
#include <clx.h>
#pragma hdrstop
#include <iostream.h>
#include <conio.h>
#include <string>
#include <cstring>
 
struct Nod{
   int inf;
   Nod *next;
};
Nod *stiva;
AnsiString exp;
int i;
char el[3];
int x;
int op1,op2;
int rez;
//-------------------------------------------------------------------------
 
include (Nod *stiva, int v)
{
  Nod *X=new Nod;
  (*X).inf = v;
 (*X).next = stiva;
  stiva=X;
}
//-------------------------------------------------------------------------
int extrage(Nod *stiva)
{
    Nod *X=new Nod();
    X=stiva;
    int v=(*X).inf;
   stiva=(*stiva).next;
    delete X;
    return v;
}
 
//--------------------------------------------------------------------------
 
obrabotka(char el[3])
{
  if ((StrToInt(el) >= 0) && (StrToInt(el) <= 99))
  {
      int y=StrToInt(el);
      include(stiva,y); cout<<el;
      }
      else
        {
        op1=extrage(stiva);
        op2=extrage(stiva);
        switch (el[1]) {
        case '+': rez=op1+op2;
        case '-': rez=op2-op1;
        case '*': rez=op1*op2;
        case '/': rez=op2%op1;
        }
    include(stiva,rez);
    }
    cout<<rez<<"\n";
}
//---------------------------------------------------------------------------
 
#pragma argsused
 main(int argc, char* argv[])
{
cout<<"Vvedite elementi. Posle zaverwenia vvoda vvedite S\n";
 
while ((el!="S") || (el!="s")){
  gets(el);
  obrabotka(el);
 //for (int j=1;j<=25;i++){
 //cin>>el[j];
 }
        getch();
        }
//---------------------------------------------------------------------------
Вот код ошибки. На строке obrabotka(el);



Пы. Сы. Забыла прикрепить в прошлый раз фото)))
0
 Аватар для Lelik-pahan
1703 / 899 / 207
Регистрация: 25.11.2009
Сообщений: 1,848
23.04.2013, 19:38
Виноват, мой косяк в условии )
C++
1
2
int buf;
if (TryStrToInt(el, buf) && StrToInt(el) >= 0 && StrToInt(el) <= 9)
1
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
23.04.2013, 19:46
olea, Подробно не смотрел, но крайне смущает отсутствие break после case
2
5 / 5 / 2
Регистрация: 30.01.2012
Сообщений: 153
23.04.2013, 20:02  [ТС]
Цитата Сообщение от Lelik-pahan Посмотреть сообщение
Виноват, мой косяк в условии )
C++
1
2
int buf;
if (TryStrToInt(el, buf) && StrToInt(el) >= 0 && StrToInt(el) <= 9)
спасибо большое. помогло.

break добавила, но не помогает.

скажите пожалуйста, а чтобы указателю stiva присвоить адрес указателя X такая запись подходит?
C++
1
stiva=X;
Просто ничего толкового не нашла в интернете. в примерах есть разные варианты обращения.

Спасибо еще раз
0
 Аватар для Lelik-pahan
1703 / 899 / 207
Регистрация: 25.11.2009
Сообщений: 1,848
23.04.2013, 20:04
Цитата Сообщение от olea Посмотреть сообщение
break добавила, но не помогает.
После каждого кейса или один в самом конце? надо после каждого
0
5 / 5 / 2
Регистрация: 30.01.2012
Сообщений: 153
23.04.2013, 20:48  [ТС]
Цитата Сообщение от Lelik-pahan Посмотреть сообщение
После каждого кейса или один в самом конце? надо после каждого
после каждого)

та проблема уже решилась вашим способом.

появилась другая, связанная с динамическим списком, как я подозреваю

Добавлено через 42 минуты
Lelik-pahan, скажите, а передать указатель на динамический список по ссылке нужно так:?

C++
1
include(Nod *stiva, int v)
я подозреваю, что нет
0
 Аватар для Lelik-pahan
1703 / 899 / 207
Регистрация: 25.11.2009
Сообщений: 1,848
23.04.2013, 20:53
olea, да вроде у вас нормально всё передаётся... Но точно не могу сказать )
Как минимум, если бы вы что-то неверно передавали, компилятор бы ругался
0
5 / 5 / 2
Регистрация: 30.01.2012
Сообщений: 153
23.04.2013, 21:03  [ТС]
Цитата Сообщение от Lelik-pahan Посмотреть сообщение
olea, да вроде у вас нормально всё передаётся... Но точно не могу сказать )
Как минимум, если бы вы что-то неверно передавали, компилятор бы ругался
так ругается. при вводе символа. на строку int v=(*X).inf;

C++
1
2
3
4
5
6
7
8
9
int extrage(Nod *stiva)
{
    Nod *X=new Nod();
    X=stiva;
    int v=(*X).inf;
   stiva=(*stiva).next;
    delete X;
    return v;
}
ошибка на фото


проверяла, адрес указателя после добавленного элемента не изменяется глобально, а только в той процедуре.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.04.2013, 21:03
Помогаю со студенческими работами здесь

Не работает сравнение строк
Ребят помогите разобраться, это какой-то кошмар сижу уже часов 5 ломаю голову. Есть html документ, необходимо из него удалить...

Не работает сравнение строк
private: System::Void button4_Click(System::Object^ sender, System::EventArgs^ e) { Gournal = Manager::get_instance(); ...

Не работает сравнение строк
Не пойму в чем может быть причина. Такой вариант не работает, скажите где ошибка? Пожалуйста. procedure TForm1.Button2Click(Sender:...

Не работает сравнение строк
Почему у меня не сравнивает строки между собой? Если строка стала меньше то &quot;YES&quot; иначе &quot;NO&quot; #include...

Не работает сравнение строк
При почленном сравнении строк l=Console.ReadLine(); int kol=new int; double sum = new double; for (j = 0; j...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru