girdiğinde yazdırma bildirimi hatası nasıl verilir Kullanıcı girişlerini toplayan bir süre döngü menüsü var. Bununla birlikte, seçim yapmak için sınırlı sayıda seçenek vardır (bu örnekte 4 ve 6).Kullanıcı geçersiz bir sayının veya harfin C
Menü Bir:
Ben ilk menü kullanıcı girişi eylemi seçmek için harfleri kullanır. Kullanıcının, menüde kullanılmayan harflerden herhangi birini kullanması durumunda geçersiz bir harf girdiklerini belirten bir printf ifadesi almasını istiyorum. Şu anda kullanmak
printf("\n\nOption | Action\n");
printf(" Q | Quit\n");
printf(" T | Loan Table\n");
printf(" C | Calculate Loan\n");
printf(" E | Explanation\n");
printf("Select Option: ");
fseek(stdin, 0, SEEK_END);
scanf("%c", &menuChoice);
menuChoice = toupper(menuChoice);
Benim şu anki hata kolu olan: örneğin e değil ama yine de C ise bu besbelli çünkü çalışmıyor
if(menuChoice != 'Q' || menuChoice != 'T' || menuChoice != 'C' || menuChoice != 'E')
{
printf("Error! Choose a valid menu option.");
}
Bu, aşağıdaki kodu hala hata mesajını çekecektir. Bunu kaldırdığımdan beri.
Benim döngü ancak hiçbir şey yapmaz şu anda bu kullanırken ve hala döngüler C. çalışırken nasıl çok acemi değilim
bu menü için Sorum ben bir baskı yukarı çekiyorsunuz nasıl Bu menü için ifade hatası?
Menü İki: Bir numara sistemi kullanır gibi var
diğer menü biraz daha karmaşıktır. Temelde yukarıdaki menüye benziyor, aksine sadece sayılarla. Ancak daha fazla koşul var. Menü kodu:
printf("\nYou selected option C.\n");
printf("\nLoan Calculator\n");
printf("Option | Plan\n");
printf(" 1 | LF1\n");
printf(" 2 | LF2\n");
printf(" 3 | BBPL\n");
printf(" 4 | ILZERO\n");
printf(" 5 | ILFIVE\n");
printf(" 6 | LS5\n");
printf("Select Plan: ");
fseek(stdin, 0, SEEK_END);
scanf("%d", &planCode);
//CHECK IF IT IS A NUMBER BETWEEN 1 AND 6
printf("Cost of car: ");
fseek(stdin, 0, SEEK_END);
scanf("%d", &carCost);
//CHECK IF IT IS A NUMBER
printf("Deposit: ");
fseek(stdin, 0, SEEK_END);
scanf("%d", &deposit);
//CHECK IF IT IS A NUMBER
printf("Length of Loan (years): ");
fseek(stdin, 0, SEEK_END);
scanf("%d", &loanLength);
//CHECK IF IT IS A NUMBER AND IS BETWEEN 1 AND 10
Gösterildiği gibi daha fazla koşul var. Hatayı yakalamaya çalışmanın birçok yolunu denedim, ancak koşul karşılanmasa bile program her zaman çökecektir veya yazdırma ifadesini gösterecektir.
!isdigit()
'u denedim, ancak bir rakam olsa bile ifadeyi yine de çalar.
Bu hataları nasıl yakalarım?
C'ye oldukça yeni yaşıyorum ve bunların çevrimiçi ortamda sınır kaynakları olduğuna inanıyorum, umarım yardımcı olabilirsiniz.
içerir:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <math.h>
Hesaplamalar:
double calcPayment(double loanAnnualRate, double loan, int length)
{
double retv;
int payments;
double mul;
double rate;
rate = loanAnnualRate/12;
payments = length * 12;
mul = pow(1 + rate, payments);
retv = (loan * mul * rate)/(mul - 1);
return retv;
}
Ana: Bu yeterli bilgi değilse İşte
peşin
teşekkürler yazdım bütün kodudurint main()
{
char menuChoice;
int planCode;
int carCost, deposit, loanLength;
double loanInitial;
double loanPayments;
double IALSpecialRate;
double fee;
do
{
printf("\n\nOption | Action\n");
printf(" Q | Quit\n");
printf(" T | Loan Table\n");
printf(" C | Calculate Loan\n");
printf(" E | Explanation\n");
printf("Select Option: ");
fseek(stdin, 0, SEEK_END);
scanf("%c", &menuChoice);
menuChoice = toupper(menuChoice);
if (menuChoice == 'T')
{
printf("\nYou selected option T.\n");
printf("\nVendor Loan Details List\n");
printf("+-----------------------------------------------------------------------------------------------------------------------+\n");
printf("| | Loan Vendor | Loan Product Code | Initial Fee | Monthly Fee | Interest Rate % | Max. Loan Amount | Min. Loan Amount |\n");
printf("+-----------------------------------------------------------------------------------------------------------------------+\n");
printf("| 1 | Leaf-Friend | LF1 | $150 | $0 | 6.14%% | $70,000 | $5,000 |\n");
printf("+-----------------------------------------------------------------------------------------------------------------------+\n");
printf("| 2 | Leaf-Friend | LF2 | $155 | $0 | 6.24%% | $70,000 | $1,000 |\n");
printf("+-----------------------------------------------------------------------------------------------------------------------+\n");
printf("| 3 | Big Bank | BBPL | $150 | $0 | 6.30%% | $80,000 | $5,000 |\n");
printf("+-----------------------------------------------------------------------------------------------------------------------+\n");
printf("| 4 | ITSALOAN | ILZERO | $149 | $0 | 7.10%%* | $50,000 | $1,000 |\n");
printf("+-----------------------------------------------------------------------------------------------------------------------+\n");
printf("| 5 | ITSALOAN | ILFIVE | $140 | $5 | 7.10%%* | $50,000 | $1,000 |\n");
printf("+-----------------------------------------------------------------------------------------------------------------------+\n");
printf("| 6 | Loan Sheep | LS5 | $349 | $0 | 5.91%% | $50,000 | $500 |\n");
printf("+-----------------------------------------------------------------------------------------------------------------------+\n");
printf("NOTE*: ITSALOAN has a special promotion on at the moment for any loan above $20000 the interest rate drops to 6.1%");
}
if (menuChoice == 'C')
{
printf("\nYou selected option C.\n");
printf("\nLoan Calculator\n");
printf("Option | Plan\n");
printf(" 1 | LF1\n");
printf(" 2 | LF2\n");
printf(" 3 | BBPL\n");
printf(" 4 | ILZERO\n");
printf(" 5 | ILFIVE\n");
printf(" 6 | LS5\n");
printf("Select Plan: ");
fseek(stdin, 0, SEEK_END);
scanf("%d", &planCode);
//CHECK IF IT IS A NUMBER BETWEEN 1 AND 6
printf("Cost of car: ");
fseek(stdin, 0, SEEK_END);
scanf("%d", &carCost);
//CHECK IF IT IS A NUMBER
printf("Deposit: ");
fseek(stdin, 0, SEEK_END);
scanf("%d", &deposit);
//CHECK IF IT IS A NUMBER
printf("Length of Loan (years): ");
fseek(stdin, 0, SEEK_END);
scanf("%d", &loanLength);
//CHECK IF IT IS A NUMBER AND IS BETWEEN 1 AND 10
if (planCode == 1)
{
loanInitial = carCost - deposit;
if (loanInitial < 5000.00)
{
printf("\nSorry! Your loan is too low to be used with LF1.\nTry either LF2, ILZERO or ILFIVE.\n");
}
if (loanInitial > 70000.00)
{
printf("\nSorry! Youe loan is too high to be used with LF1.\nTry BBPL.\n");
}
if (loanInitial >= 5000.00 && loanInitial <= 70000.00)
{
loanPayments = calcPayment(0.0614, loanInitial, loanLength);
fee = 150;
printf("Loan Size : $ %8.2lf", loanInitial);
printf("\nTotal Repayment : $ %8.2lf", loanPayments * 12 * loanLength + fee);
printf("\nMonthly Repayments : $ %8.2lf", loanPayments);
printf("\nAnnual Repayment(s) : $ %8.2lf", loanPayments * 12);
printf("\nTotal Repayment Without Fees : $ %8.2lf", loanPayments * 12 * loanLength);
printf("\nTotal Fees : $ %8.2lf", fee);
printf("\nActual Loan Cost : $ %8.2lf", loanPayments * 12 * loanLength + fee - loanInitial);
}
}
if (planCode == 2)
{
loanInitial = carCost - deposit;
if (loanInitial < 5000.00)
{
printf("\nSorry! Your loan is too low to be used with LF2.\nTry LS5\n");
}
if (loanInitial > 70000.00)
{
printf("\nSorry! Youe loan is too high to be used with LF2.\nTry BBPL.\n");
}
if (loanInitial >= 1000.00 && loanInitial <= 70000.00)
{
loanPayments = calcPayment(0.0624, loanInitial, loanLength);
fee = 155;
printf("Loan Size : $ %8.2lf", loanInitial);
printf("\nTotal Repayment : $ %8.2lf", loanPayments * 12 * loanLength + fee);
printf("\nMonthly Repayments : $ %8.2lf", loanPayments);
printf("\nAnnual Repayment(s) : $ %8.2lf", loanPayments * 12);
printf("\nTotal Repayment Without Fees : $ %8.2lf", loanPayments * 12 * loanLength);
printf("\nTotal Fees : $ %8.2lf", fee);
printf("\nActual Loan Cost : $ %8.2lf", loanPayments * 12 * loanLength + fee - loanInitial);
}
}
if (planCode == 3)
{
loanInitial = carCost - deposit;
if (loanInitial < 5000.00)
{
printf("\nSorry! Your loan is too low to be used with BBPL.\nTry either LF2, ILZERO or ILFIVE.\n");
}
if (loanInitial > 80000.00)
{
printf("\nSorry! Youe loan is too high to be used with BBPL.\nTry a cheaper car below $80,000.\n");
}
if (loanInitial >= 5000.00 && loanInitial <= 80000.00)
{
loanPayments = calcPayment(0.063, loanInitial, loanLength);
fee = 150;
printf("Loan Size : $ %8.2lf", loanInitial);
printf("\nTotal Repayment : $ %8.2lf", loanPayments * 12 * loanLength + fee);
printf("\nMonthly Repayments : $ %8.2lf", loanPayments);
printf("\nAnnual Repayment(s) : $ %8.2lf", loanPayments * 12);
printf("\nTotal Repayment Without Fees : $ %8.2lf", loanPayments * 12 * loanLength);
printf("\nTotal Fees : $ %8.2lf", fee);
printf("\nActual Loan Cost : $ %8.2lf", loanPayments * 12 * loanLength + fee - loanInitial);
}
}
if (planCode == 4)
{
loanInitial = carCost - deposit;
if (loanInitial < 1000.00)
{
printf("\nSorry! Your loan is too low to be used with ILFIVE.\nTry LS5.\n");
}
if (loanInitial > 50000.00)
{
printf("\nSorry! Youe loan is too high to be used with ILFIVE.\nTry either LF1, LF2, BBPL or LS5.\n");
}
if (loanInitial >= 1000.00 && loanInitial <= 50000.00)
{
if (loanInitial >= 20000) { IALSpecialRate = 0.061; }
else IALSpecialRate = 0.071;
loanPayments = calcPayment(IALSpecialRate, loanInitial, loanLength);
fee = 149;
printf("Loan Size : $ %8.2lf", loanInitial);
printf("\nTotal Repayment : $ %8.2lf", loanPayments * 12 * loanLength + fee);
printf("\nMonthly Repayments : $ %8.2lf", loanPayments);
printf("\nAnnual Repayment(s) : $ %8.2lf", loanPayments * 12);
printf("\nTotal Repayment Without Fees : $ %8.2lf", loanPayments * 12 * loanLength);
printf("\nTotal Fees : $ %8.2lf", fee);
printf("\nActual Loan Cost : $ %8.2lf", loanPayments * 12 * loanLength + fee - loanInitial);
}
}
if (planCode == 5)
{
loanInitial = carCost - deposit;
if (loanInitial < 1000.00)
{
printf("\nSorry! Your loan is too low to be used with ILFIVE.\nTry LS5.\n");
}
if (loanInitial > 50000.00)
{
printf("\nSorry! Youe loan is too high to be used with ILFIVE.\nTry either LF1, LF2, BBPL or LS5.\n");
}
if (loanInitial >= 1000.00 && loanInitial <= 50000.00)
{
if (loanInitial >= 20000) { IALSpecialRate = 0.061; }
else IALSpecialRate = 0.071;
loanPayments = calcPayment(IALSpecialRate, loanInitial, loanLength);
loanPayments = calcPayment(0.071, loanInitial, loanLength);
fee = 40;
printf("Loan Size : $ %8.2lf", loanInitial);
printf("\nTotal Repayment : $ %8.2lf", loanPayments * 12 * loanLength + fee + (60 * loanLength));
printf("\nMonthly Repayments : $ %8.2lf", loanPayments + 5);
printf("\nAnnual Repayment(s) : $ %8.2lf", loanPayments * 12 + 60);
printf("\nTotal Repayment Without Fees : $ %8.2lf", loanPayments * 12 * loanLength);
printf("\nTotal Fees : $ %8.2lf", fee);
printf("\nActual Loan Cost : $ %8.2lf", loanPayments * 12 * loanLength + fee - loanInitial + (60 * loanLength));
}
}
if (planCode == 6)
{
loanInitial = carCost - deposit;
if (loanInitial < 500.00)
{
printf("\nSorry! Your loan is too low to be used with LS5.\n");
}
if (loanInitial > 55000.00)
{
printf("\nSorry! Youe loan is too high to be used with LS5.\nTry either LF1, Lf2 or BBPL.\n");
}
if (loanInitial >= 500.00 && loanInitial <= 55000.00)
{
loanPayments = calcPayment(0.0591, loanInitial, loanLength);
fee = 349;
printf("Loan Size : $ %8.2lf", loanInitial);
printf("\nTotal Repayment : $ %8.2lf", loanPayments * 12 * loanLength + fee);
printf("\nMonthly Repayments : $ %8.2lf", loanPayments);
printf("\nAnnual Repayment(s) : $ %8.2lf", loanPayments * 12);
printf("\nTotal Repayment Without Fees : $ %8.2lf", loanPayments * 12 * loanLength);
printf("\nTotal Fees : $ %8.2lf", fee);
printf("\nActual Loan Cost : $ %8.2lf", loanPayments * 12 * loanLength + fee - loanInitial);
}
}
}
if (menuChoice == 'E') { printf("\nYou selected option E.\n"); }
if (menuChoice == 'Q')
{
printf("\nExiting Program...\n");
exit(0);
}
} while (menuChoice != 'Q' || menuChoice != 'T' || menuChoice != 'C' || menuChoice != 'E');
printf("\nPlease Choose a valid option.\n");
_getch;
return 0;
}
'if (menuChoice! = 'Q' || menuChoice! = 'T' || menuChoice! = 'C' || menuChoice! = 'E')' her zaman doğru olacaktır. Bir an için düşün. İhtiyacınız olan şey olduğunu anlayacaksınız. –
Biliyorum. Sorumu okumadın mı? “Açıkçası işe yaramıyor çünkü eğer örneğin E olmasa da yine de C hala hata mesajını çekecek. Bunu kaldırdım.” – Moms
@Cool Guy aslında haklıdır. Eğer karakter başka bir şey varsa o zaman bir hata yazdırmak istersiniz. Bu, eğer Q VEYA T VE DEĞİL ise ... Ama Roux tarafından sağlanan 'switch' çözümü hala daha iyidir. –