Ошибка в коде

Вот фрагмент кода. пишет что здесь две ошибки. Одна это синтаксическая ошибка && а вторая отсутствие ; перед {

if((c==3 || c==7 || c==11) && (e==3 || e==6 || e==9) && (c!=h1 && c!=j1 && c!=k1 && c!=l1 && c!=y1 && c!=u1 && c!=g1 && c!=o1 && c!=p1) && (e!=h && e!=j && e!=k && e!=l && e!=y && e!=u && e!=g && && e!=o && && e!=p)){
break;}
помогите

Юрий, это костыль. Плохо реализованный костыль :3

Саня, покажи код и задачу полностью.

#include<iostream>
using namespace std;
int main()
{
    setlocale(0, "");
    float a, b;
    float c;
    char e;
    char d;
    cout << "Вас приветствует программа Калькулятор(v.1.0)!!!" << endl;
    cout << "Если вы хотите продолжить работу в программе введите Yes, если нет введите No." << endl;
    cin >> d;
    while (d == 'yes')
    {
        cout << "Введите первое число:";
        cin >> a;
        cout << "Введите второе число:";
        cin >> b;
        cout << "Введите знак действия:";
        cin >> e;
        if (e == '+')
        {
            c = a + b;
            cout << "Ответ:" << c << endl;
        }
        else if (e == '-')
        {
            c = a - b;
            cout << "Ответ:" << c << endl;
        }
        else if (e == '*')
        {
            c = a * b;
            cout << "Ответ:" << c << endl;
        }
        else if (e == '/')
        {
            c = a / b;
            cout << "Ответ:" << c << endl;
        }
    }
    cout << "Программа зaвершила работу." << endl;
    system("pause");
    return 0;
}

Почему при вводе yes, while не выполняется.

Потому что char это 1 символ, а в слове yes их три. Или замени «char d», на «string d»
(заголовочный файл #include <string>) или замени «yes» и «no» на «Y» и «N».

Потому что char это 1 символ, а в слове yes их три.

4

или замени «yes» и «no» на «Y» и «N».

'Y' и 'N'

Потому что строка всегда оканчивается терминальным нулём. А у std::string метод size возвращает количество символов, без учёта терминального нуля, в данном случае 3.

Почему 4???

В вопросе ТС char, а не std::string. В Си-строках принято заканчивать строку терминальным '\0' в конце. Для литерала «yes» будет создан массив данных(скорее всего будет зашит в секцию кода) вида {'y','e','s','\0'}

А у std::string метод size возвращает количество символов, без учёта терминального нуля, в данном случае 3.

у std::string символ '\0' вообще не является терминальным. Он появляется только при отдаче c_str.
Мало того, до C++11 символы в std::string не обязаны были лежать друг за другом в одной обасти памяти. Внутренняя организация могла быть какой угодно.

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

Пожалуйста, оформляйте исходный код в соответствии с правилами разметки. Для того, чтобы вставить код в комментарий, скопируйте его в текстовое поле ниже, после чего выделите то, что скопировали и нажмите кнопку «код» в панели инструментов. Иначе ваш код может принять нечитаемый вид.

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.