¿Funcion que controle proceso?

Buenas, tengo problema deseo que esta función permita crear un evento nuevo y luego ingresar datos en el evento creado. El problema es que si el usuario, primero digita opción 2, el programa empieza a pedir los datos. Existe alguna función o como es el proceso para que mande un aviso de que primero debe crear el evento.

void evento(){
    int opcion;
    char d[10000];
    cout<<"BIENVENIDO";
    cout<<"1-Crear un evento";
    cout<<"2-Ingresar datos a evento nuevo";
    switch (opcion){
        case 1: cout<<"Usted va a crear un nuevo evento";
                cout<<"Por favor,indique el nombre del evento a crear";
                cin>>d;
                cout<<"Por favor, digite el valor de la boleta base (Sin comas ni puntos)";
                cin>>valorbase;
                cout<<"Evento creado con exito";
        case 2: cout<<"Va a ingresar los datos a su nuevo evento";

    }
}
1
задан 30.11.2016, 13:56
2 ответа

Ты можешь создавать переменную booleana, что инициализировался в фальшивый назначено по умолчанию. После, если он введет первый в выбор 1, тогда он изменится в истинный, и если он введет в выбор 2, но продолжит, что в фальшивом он покажет ошибку, и если он не выполнит соответствующий код.

Осталось бы нечто похожее:

void evento(){
    int opcion;
    bool pasaSegundoPaso = false; //Nuevo
    char d[10000];
    cout<<"BIENVENIDO";
    cout<<"1-Crear un evento";
    cout<<"2-Ingresar datos a evento nuevo";
    switch (opcion){
        case 1: cout<<"Usted va a crear un nuevo evento";
                cout<<"Por favor,indique el nombre del evento a crear";
                cin>>d;
                cout<<"Por favor, digite el valor de la boleta base (Sin comas ni puntos)";
                cin>>valorbase;
                cout<<"Evento creado con exito";
                pasaSegundoPaso = true; //Le asignas el valor a true porque ya ha creado el evento
        case 2: 
               //Si no ha creado evento muestra mensaje. Si no, inserta los nuevos datos
               if(pasaSegundoPaso == false){ 
                   cout << "Debe crear el evento primero (Opción 1)";
               }else{
                   cout<<"Va a ingresar los datos a su nuevo evento";
               }
    }
}
1
ответ дан 24.11.2019, 12:19
  • 1
    ¿ Переменная не deberí чтобы быть está костариканская? –  eferion 30.11.2016, 14:23
  • 2
    @eferion Правда, которую я не контролирую много C ++ и верю в то, что помню, что он инициализировался así переменная, чтобы использовать ее внутри того же mé все. Однако, я это не протестировал. –  Francisco Romero 30.11.2016, 14:26
  • 3
    Проблема - что второй раз, который ты призываешь к mé совсем, если переменная не está костариканская, volverá чтобы инициализировать Вашу стоимость в false. Но это не исключительная проблема этой переменной, который añ adido а tambié n d и какой-то другой, которая не мы enseñ в. –  eferion 30.11.2016, 14:37
  • 4
    @eferion Sí но я понимаю, что каждый раз, когда создает новый mé все хочет подтвердить, если эта comprobació n будь сделана или не вводя этот mé все. Действительно só это с этой funció n мы не можем знать оставшуюся часть программы, я думал, что прямо ejecutarí в оставшуюся часть có я говорю в else if. –  Francisco Romero 30.11.2016, 14:42
  • 5
    В которое он шел, дело в том, что ты называешь evento, и pasaSegundoPaso инициализируется в false. Ты выписываешь событие и, как нет циклов, программа оставляет funció n. Ты называешь вторым разом evento и pasaSegundoPaso volverá чтобы стоить false несмотря на то, что ты создал событие в первом вызове. Не, если я объясняюсь –  eferion 30.11.2016, 14:51

Твоя функция как будь написана, что он не имеет много чувства:

  • Ты хранишь имя события в d (он не мог называться лучше nombreEvento или evento?)
  • Ввиду того, что нет циклов в функции, ждут, что программа была должна звонить несколько раз в функцию
  • d она не является статической, потом стоимость, попавшая в первый вызов не будет доступна во второй
  • Также ты не даешь возможность никакому механизму для того, чтобы стоимость вышеупомянутой переменной вышла из функции или смогла проходить снаружи (ни return даже не аргументы).
  • Что valorBase? Ты опустил Ваше заявление в коде.
  • Как функционирует ввод информации данных?
  • У цепей вывода нет разрывов линии: Ты протестировал код в каком-то моменте?
  • Выборы switch они не отделены одним break. Они забыли ты?

Мы идем по частям.

Если функция не должна называться несколько раз, entonce тебе не хватает цикла в функции:

void evento()
{
  int opcion;
  do
  {
    cout << "BIENVENIDO\n"
         << "1-Crear un evento\n"
         << "2-Ingresar datos a evento nuevo\n"
         << "3-Salir\n";
    switch (opcion)
    {
      // ...
    }
  } while( opcion != 3 );
}

Если оказывается, что не, что должны называться несколько раз тогда логическое, он состоит в том, чтобы он получил путь аргументы, данные, в которых он нуждается, чтобы функционировать. В любом случае (и это применимое также к предыдущему примеру) ты был бы должен показывать, что происходит, если пользователь вводит стоимость вне ранга (1,2)

void evento(char* nombreEvento, /* ... */)
{
  int opcion;

  cout << "BIENVENIDO\n"
       << "1-Crear un evento\n"
       << "2-Ingresar datos a evento nuevo\n";

  switch (opcion)
  {
    // ...

    case default:
      /* ¿Qué hacer aquí? */
  }
}

Если оказывается, что функция должна быть автосдержанной и их будут называться несколько раз (мне не приходит в голову мотив, но не видя состояние кода также возможно угадывать слишком много), тогда d это должна бы быть статика, чтобы сохранять Вашу стоимость между различными вызовами:

void NuevoEvento(char* evento, char* valor)
{
  cout << "Usted va a crear un nuevo evento\n"
       << "Por favor,indique el nombre del evento a crear";
  cin >> ptr;
  cout << "Por favor, digite el valor de la boleta base (Sin comas ni puntos)";
  cin >> valor;
  cout << "Evento creado con exito";
}

void evento(){
  int opcion;
  static char d[10000] = '\0';
  cout<<"BIENVENIDO";
  cout<<"1-Crear un evento";
  cout<<"2-Ingresar datos a evento nuevo";
  switch (opcion){
    case 1:
      NuevoEvento(d,valorBase);
      break; // ¿Seguro que no es necesario?

    case 2:
      if( *d == 0 )
        cout << "Primero debes crear el evento\n";
      else
        IntroducirDatosEvento(d);
      break;
  }
}

Я взял на себя труд доставать код вне функции из-за простой читабельности. switch уже они могут быть слишком проблематичными как чтобы ощупывать дьявола.

1
ответ дан 24.11.2019, 12:19