0

どこが間違っているのかわかりません。プログラムを実行しようとすると、選択肢を渡さず、選択肢を求めた後、プログラムの最後に直接進みます。また、Visual C++ コンパイラの [ビルドからの出力を表示] で警告が表示されます。誰でもこれで私を助けてくれますか?

     #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;
    }
4

4 に答える 4

2

おそらく、パスワードを複数文字にする必要があるため、単一の ではなく「文字列」が必要ですchar。残念ながら、C には文字列型はありませんが、char十分な配列があります。経由で文字をリクエストする代わりに、 経由scanf("%c",&password);で「文字列」をリクエストする必要がありますscanf("%s",&password);ただし、パスワードを保持するのに十分な長さの配列として定義するpassword 必要があります。[1]char

これによりプログラムが「最後までスキップ」する理由は、%cが入力の 1 文字しか読み取らないためです。おそらく複数の文字を入力しました。プログラムの後半で、数字以外のパスワードを消費できないintビアを読み取ろうとしたため、呼び出しが失敗しましたが、これらの呼び出しからの戻り値をチェックしなかったため、コードは失敗について認識していませんでした。%dscanf()


[1] 実際passwordには、ユーザーが入力することを決めたものを保持するのに十分な長さにする必要があります。%20s実際には、重大なセキュリティ ホールである配列のオーバーランを防ぐなど、フォーマット幅の使用を調査する必要があります。しかし、これは宿題なので、現時点ではそのような詳細はあまり重要ではないと仮定します。

于 2013-10-18T06:50:22.713 に答える
1

次のコードで問題が解決するはずです。

#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;
}
于 2013-12-13T06:47:24.227 に答える
0

文字タイプを読む前にこれfflush(stdin);

またはする

 scanf(" %c", &password);// see the extra space between '"' and '%'
于 2013-10-18T06:34:28.460 に答える
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;
}//
于 2014-10-15T07:46:59.670 に答える