возможно неправильный оператор if, не переходящий в следующую строку после ввода

0

Когда я запускаю свою программу, я должен ввести количество строк, которые я хочу получить в своем выпуске. У меня есть предел от 1 до 100 строк. Каждая строка представляет собой задачу с именем задачи, за которой следует увеличение числа, например: Task1 :, Task2,.... Когда я ввожу что-то во ввод, он должен преобразовать входную строку/см. Код ниже - кроме кода в главном();/. Моя проблема в том, что когда я печатаю первый ввод, он должен перейти к следующей задаче/следующей строке /, но это не так. Я печатаю, например, 10 строк, но они не идут каждый к следующей задаче, но они остаются в одной задаче. Надеюсь, вы сейчас поймете.

 #include<iostream>
    #include<string>
    #include <ctype.h>

    using namespace std;

    void Convert(string input){
        string output = "";
        string flag = "";
        bool underscore = false;
        bool uppercase = false;
        if ( islower(input[0]) == false){
            cout << "Error!" <<endl;
            return;
        }

        for (int i=0; i < input.size(); i++){
            if ( (isalpha( input[i] ) || (input[i]) == '_') == false){
                cout << "Error!" <<endl;
                return;
            }
            if (islower(input[i])){
                if (underscore){
                    underscore = false;
                    output += toupper(input[i]);
                }
                else
                    output += input[i];

            }
            else if (isupper(input[i])){
                if (flag == "C" || uppercase){
                    cout << "Error!"<<endl;
                    return;
                }
                flag = "Java";
                output += '_';
                output += tolower(input[i]);

            }
            else if (input[i] == '_'){
                if (flag == "Java" || underscore){
                cout << "Error!" <<endl;
                return;
                }
                flag = "C";
                underscore = true;
            }
        }
        cout << output <<endl;
    } 



    int main(){

        const int max = 100;
        string input;
        int pocet_r;
        cout << "Zadaj pocet uloh:" << endl;
        cin >> pocet_r;

        if(pocet_r >= 1 && pocet_r <=100)
        {
                   for (int i = 0; i <pocet_r; i++)
                   {
                     cout << "Uloha " << i+1 << ":" << endl;
                     while (cin >> input)
                     Convert (input);



                    while(input.size() > max)
                     cout << "slovo musi mat minimalne 1 a maximalne 100 znakov" << endl;

                     while(input.size() > max)
                     cin >> input;


                    while (cin >> input)
                    Convert(input);



                   }
        }else{
         cout << "Minimalne 1 a maximalne 100 uloh" << endl;
    }


    system("pause");
    }
  • 1
    Вы должны написать более одного очень длинного и сложного для понимания предложения и подробно объяснить, что вы пытаетесь сделать, иначе мы не сможем помочь, и, следовательно, вы будете очень разочарованы, потому что мы вам вообще не поможем, поэтому, пожалуйста, перефразируй свой вопрос, чтобы у нас была возможность понять это! Я чистый ?
  • 1
    Запутанный и неловко глубокий отступ. Не буду читать Улучшите это, люди не будут тратить время, пытаясь угадать, в чем ваша проблема.
Показать ещё 1 комментарий
Теги:
if-statement

1 ответ

0

Ваш первый, если в Convert всегда будет терпеть неудачу на не-подчеркивании и возвращаться. Я не думаю, что это было предназначено. Согласитесь с другим ответом на петлю цикла. Следующие два момента должны быть, по-видимому. Шаг через этот код с отладчиком и следите за ним по очереди и посмотрите, где он не работает. У вас здесь несколько проблем, и я не совсем уверен, что это за намерение.

Изменить - я не правильно разбирал лишние скобки. Первое, если в конверте на самом деле все в порядке.

  • 0
    Точнее, опустите while в while (cin >> input) . Переменная в верхнем регистре никогда не устанавливается в true, но ничего не меняет, так как вы также устанавливаете флаг в «C». Если у вас есть имя задачи с двумя подчеркиваниями, это даст ошибку.
  • 0
    Я обнаружил, что когда я что-то набираю, я нажимаю клавишу ввода и получаю преобразованную строку, которая идеально подходит, затем я делаю это еще раз, я получаю тот же результат. Теперь у меня есть 4 строки строк. Задача 1: ввод, вывод, ввод, вывод Задача 2: ввод, вывод, ввод, вывод Задача3: ввод, .... интересно, почему?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню