No soy capaz de averiguar dónde está el error. Cuando estoy tratando de ejecutar el programa, no la va pasar a la elección y que va directamente a la final del programa después de preguntar por la elección. Y, también dar algún aviso en «Mostrar la salida de construir» en el compilador de visual c++. Alguien me puede ayudar con esto, por favor?

     #include <stdio.h>
     int main ()
     {
     int card_number, choice, withdraw, deposit;
     float amount = 3000.00, new_amount = 0;
     char password;
     printf("Enter the card number: ");
     scanf("%d", &card_number);
     printf("Enter the Password: ");
     scanf(" %c", &password);
     printf("\n\n");
     printf("\n\t***********************************");
     printf("\n\t*           MENU                  *");
     printf("\n\t*     1. Check Balance            *");
     printf("\n\t*     2. Withdraw                 *");
     printf("\n\t*     3. Deposit                  *");
     printf("\n\t*     4. Exit                     *");
     printf("\n\t*                                 *");
     printf("\n\t***********************************");
     printf("\n\n");
     printf("Enter your choice: ");
     scanf("%d", &choice);

     if (choice == 1)
       {
      printf("Current balance on your account: %f\n", amount);
       }
     else if (choice == 2)
      {
    printf("Enter the amount you want to withdraw: ");
    scanf("%d", &withdraw);

    if (withdraw > amount)
      {
        printf("You don't have sufficient balance");
      }
    else
      {
        new_amount = amount - withdraw;
        printf("Current balance on your account: %f\n", new_amount);
      }
}

else if (choice == 3)
{
    printf("Enter the amount you want to deposit: ");
    scanf("%d", &deposit);
    amount = amount + deposit;
    printf("Current balance on your account: %d\n", amount);
}
else if (choice == 4)
{
    printf("Thank you for using our service\n\n");
}

return 0;
    }
  • he probado tu código y sus parece bien a mí. tratar de depurar(f10)
InformationsquelleAutor anansharm | 2013-10-18

4 Comentarios

  1. 0

    antes de leer este tipo de carácter fflush(stdin);

    o hacer

     scanf(" %c", &password);//see the extra space between '"' and '%'
    • Que es un Comportamiento Indefinido. fflush es sólo para el flujo de salida.
    • Muchas gracias funcionó!! Sin embargo, soy un estudiante de ciencias de la computación. fflush es nuevo para mí. Puede usted, hágamelo saber lo que hace y por eso también su advertencia en Visual C++ para usar scanf_s en lugar de scanf.
    • vaya aquí tutorialspoint.com/c_standard_library/c_function_fflush.htm
  2. 2

    Es de suponer que usted desea que la contraseña sea más de un carácter, por lo que necesita una «cadena» ni una sola char. Por desgracia, C no tiene un tipo de cadena, pero tiene matrices de char que es lo suficientemente bueno. En lugar de pedir un personaje a través de scanf("%c",&password);, debe solicitar una «cadena» a través de scanf("%s",&password);. Sin embargo, password debe se define como una matriz de char suficiente para contener la contraseña.[1]

    La razón de esto es la causa de su programa «pase a la final» es porque la %c sólo lee un carácter de la entrada. Usted probablemente escribió varios personajes. Más tarde en el programa intenta leer un int a través de %d que no podía consumir la no-dígitos de la contraseña y, por tanto, la scanf() llamadas fallidas, pero no comprobar el valor devuelto de estas llamadas, por lo que su código no sabía acerca de los fracasos.


    [1]. en Realidad password debe ser lo suficientemente largo para contener cualquier elemento que el usuario decida entrar. Realmente usted debe investigar el uso de formato de anchos como %20s para prevenir la matriz de saturaciones, que son un grave agujero de seguridad. Pero ya que esta es una tarea, vamos a suponer que ese tipo de detalles no son importantes en el momento.

    • información Útil! Tan triste, no puedo votar, como he requieren de 15 reputación para hacerlo. Sin embargo, si voy a usar «cadena» como contraseña, en lugar de hacer ‘scanf(«%s», contraseña)’, puedo ir para ‘gets(contraseña)’. ¿qué sugiere usted será una mejor opción desde el mundo real perspectiva?
    • gets(password) tendrá todos los mismos problemas scanf tiene. En general, el C «cadena» de la biblioteca está roto desde un punto de vista de seguridad. Si usted realmente desea para tratar de hacer las cosas «bien», el uso de fgets(), tiene una longitud de parámetro para evitar el desbordamiento del búfer.
  3. 1

    El siguiente código debe resolver su problema:

    #include <stdio.h>
    #include <conio.h>
    int main ()
    {
    int card_number, choice;
    float amount = 3000.00, withdraw=0.0, deposit, new_amount=0;
    char password;
    clrscr();
    printf(" INSERT YOUR ATM CARD : ");
    printf("\n\n");
    printf(" Enter the Password: ");
    scanf("%s", &password);
    clrscr();
    printf("\n\t***********************************");
    printf("\n\t*           MENU                  *");
    printf("\n\t*     1. Check Balance            *");
    printf("\n\t*     2. Withdraw                 *");
    printf("\n\t*     3. Deposit                  *");
    printf("\n\t*     4. Exit                     *");
    printf("\n\t*                                 *");
    printf("\n\t***********************************");
    printf("\n\n");
    S:
    printf("\n Enter your choice: ");
    scanf("%d", &choice);
    if (choice == 1)
    {
    printf(" Current balance on your account: %f\n", amount);
    goto S;
    }
    else if (choice == 2)
    {
    printf(" Enter the amount you want to withdraw: ");
    scanf("%f",&withdraw);
    if (withdraw>amount)
    {
    printf(" \n You don't have sufficient balance\n ");
    goto S;
    }
    else
    {
    amount = amount - withdraw;
    printf(" \n Current balance on your account: %f\n",amount);
    goto S;
    }
    }
    else if (choice == 3)
    {
    printf(" \n Enter the amount you want to deposit: ");
    scanf("%f", &deposit);
    amount = amount + deposit;
    printf(" \n Current balance on your account: %f\n", amount);
    goto S;
    }
    else if (choice == 4)
    {
    printf(" \n Thank you for using our service\n\n");
    getch();
    }
    else
    {
    printf(" \n Enter correct Choice and Try Again \n\n");
    goto S;
    }
    getch();
    return 0;
    }
  4. 0
    #include<iostream.h>
    int main()
    {
    int password;
    for (int i=0;i<3;i++)
    {cout <<"enter password:\n";
    cin>>password;
    if (password==123456)
    {cout<<"correct!!!\n";
    double balance = 10000;
    double withdraw, deposit;
    int option;
    cout<<"\n";
    cout<<"            ***Western Ace***\n";
    cout<<"*** Automated Teller Machine***"<<endl;
    cout<<"Choose a Transaction:\n";
    cout<<"\n";
    cout    <<"[1] Inquire Balance \n"
    <<"[2] Withdraw \n"
    <<"[3] Deposit \n"
    <<"[4] Quit \n"
    <<"\n"
    <<"Enter Option:";
    cin>>option;
    switch(option)
    {
    case 1:
    cout<<"\n[[[BALANCE INQUIRY]]]\n";
    cout.setf(ios::fixed);
    cout.setf(ios::showpoint);
    cout.precision(2);
    cout<<"\n Your current balance is $"<<balance<<endl;
    break;
    case 2:
    cout<<"\n[[[WITHDRAW]]]\n";
    cout<<"Enter amount: $";
    cin>>withdraw;
    balance = balance - withdraw;
    cout.setf(ios::fixed);
    cout.setf(ios::showpoint);
    cout.precision(2);
    cout<<"You withdrew $"<<withdraw<<endl;
    cout<<"Your remaining balance is $"<<balance<<endl;
    continue;
    case 3:
    cout<<"\n[[[DEPOSIT]]]\n";
    cout<<"Enter amount: $";
    cin>>deposit;
    balance = balance + deposit;
    cout.setf(ios::fixed);
    cout.setf(ios::showpoint);
    cout.precision(2);
    cout<<"You deposited $"<<deposit<<endl;
    cout<<"Your new balance is $"<<balance<<endl;
    continue;
    case 4:
    cout<<"\n***[[[EXIT MODE]]]***\n";
    break;
    default:
    cout<<"\n That is an invalid option \n";
    }
    break;
    }
    else
    cout<<"Pls try again!!!\n";}
    return 0;
    }//
    • Explicar lo que su código es para?
    • Por favor, edita tu respuesta para agregar una explicación de cómo funciona el código y cómo se resuelve el OP del problema. Muchos carteles son novatos y no va a entender el código que has publicado.

Dejar respuesta

Please enter your comment!
Please enter your name here