在函數verify中,我有一個稱爲「size」的循環,它與「foodSelect」中的第3個循環相同,只是它由於某種原因工作不同。它不會首先提示我輸入,它會直接轉到if內部,並詢問What size (L - Large, M - Medium, S - Small): Please enter S, M, or L only:
。它首先顯示錯誤,然後再次提示我輸入。有點奇怪。如果我的循環中的語句被跳過C
源(因爲它是長):http://pastebin.com/raw.php?i=KxrMAXaU
或源位置:
#include <stdio.h>
#include <string.h>
void menu();
void question (char choice[]);
void output(char *foodChoice, char *foodSelect, char *foodSize, int *foodOrderNum, float *foodSubtotal);
int verify(char *choice, char *foodChoice);
void menu() {
/*
printf("\n");
*/
printf("\nWelcome to Sunny FISH & CHIPS!\n\n");
printf("######## Fish : Haddock(K) Large(L) | $5.00\n");
printf("# FOOD # Halibut(T) Large(L) | $4.00\n");
printf("######## Chips: Cut(C) Large(L) | $2.00\n");
printf(" Ring(R) Large(L) | $3.00\n");
printf(" | \n");
printf("########## Soft Drinks(S) Large(L) | $2.00\n");
printf("# DRINKS # Coffee(C) Large(L) | $1.75\n");
printf("########## Tea(T) Large(L) | $1.50\n");
printf("---------------------------------------------\n");
printf("Note: Medium price: 80%% of large.\n");
printf(" Small price: 60%% of large.\n");
printf("TAX is 10%%.\n");
printf("More than 5 fish, 10%% discount on drink.\n");
printf("Every 10 fish purchased, get 1 free softdrink.\n");
printf(" - size of drink is according to size of fish\n");
printf("----------------------------------------------\n\n");
}
int verify(char *choice, char *foodChoice)
{
int answer, rc = -1;
if (choice == "order")
{
do {
answer = getchar();
if (answer == 'Y' || answer == 'y')
{ rc = 1; }
else if (answer == 'N' || answer == 'n')
{ rc = 0; }
if (rc == -1 && answer != -1)
{
printf("Please enter y or n only: ");
while (answer != -1 && answer != '\n')
answer = getchar();
}
} while (rc == -1 && answer != -1);
}
if (choice == "foodSelect")
{
do {
answer = getchar();
if (foodChoice == "Fish")
{
do {
answer = getchar();
if (answer == 'K' || answer == 'k')
{ rc = 1; }
else if (answer == 'T' || answer == 't')
{ rc = 0; }
if (rc == -1 && answer != -1)
{
printf("Please enter K or T only: ");
while (answer != -1 && answer != '\n')
answer = getchar();
}
} while (rc == -1 && answer != -1);
}
if (foodChoice == "Chips")
{
do {
answer = getchar();
if (answer == 'C' || answer == 'c')
{ rc = 1; }
else if (answer == 'R' || answer == 'r')
{ rc = 0; }
if (rc == -1 && answer != -1)
{
printf("Please enter C or R only: ");
while (answer != -1 && answer != '\n')
answer = getchar();
}
} while (rc == -1 && answer != -1);
}
if (foodChoice == "Drinks")
{
do {
answer = getchar();
if (answer == 'S' || answer == 's')
{ rc = 1; }
else if (answer == 'C' || answer == 'c')
{ rc = 2; }
else if (answer == 'T' || answer == 'T')
{ rc = 3; }
if (rc == -1 && answer != -1)
{
printf("Please enter S, C, or T only: ");
while (answer != -1 && answer != '\n')
answer = getchar();
}
} while (rc == -1 && answer != -1);
}
} while (rc == -1 && answer != -1);
}
if (choice == "size")
{
do {
answer = getchar();
if (answer == 'S' || answer == 's')
{ rc = 1; }
else if (answer == 'M' || answer == 'm')
{ rc = 2; }
else if (answer == 'L' || answer == 'l')
{ rc = 3; }
if (rc == -1 && answer != -1)
{
printf("Please enter S, M, or L only: ");
while (answer != -1 && answer != '\n')
answer = getchar();
}
} while (rc == -1 && answer != -1);
}
}
void question (char *choice) {
char *choiceYesNo;
char *foodOptions;
char *foodChoice;
char *foodSelect;
char *foodSize;
int *foodOrderNum;
float *foodSubtotal;
switch (choice[0]) {
case 'f':
foodChoice = "Fish";
foodOptions = "(K- Haddock, T- Halibut)";
break;
case 'c':
foodChoice = "Chips";
foodOptions = "(C- Cut, R- Ring)";
break;
case 'd':
foodChoice = "Drinks";
foodOptions = "(S- Softdrink, C- Coffee, T- Tea)";
break;
}
printf("\nDo you order %s? (Y/N): ", foodChoice);
verify("order", foodChoice);
printf("%s choice %s: ", foodChoice, foodOptions);
verify("foodSelect", foodChoice);
printf("What size (L - Large, M - Medium, S - Small): ");
verify("size", foodChoice);
printf("How many orders do you want? (>=0): ");
scanf("%d", &foodOrderNum);
output(foodChoice, foodSelect, foodSize, foodOrderNum, foodSubtotal);
}
void output(char *foodChoice, char *foodSelect, char *foodSize, int *foodOrderNum, float *foodSubtotal) {
printf("\nYou ordered %s: %c - SIZE: %c amount ordered: %d, subtotal price: %.2lf\n\n",
foodChoice, foodSelect, foodSize, foodOrderNum, foodSubtotal);
}
int main() {
//menu();
question("drinks");
}
Ç不使用'不支持串的直接比較=='。改用['strcmp'](http://linux.die.net/man/3/strcmp)。另請參閱:http://stackoverflow.com/questions/6715247/what-is-the-difference-between-some-some-0-and-strcmpsome-some-0-in – 2012-03-26 22:16:57
你可以把它歸結爲一個最小的測試用例?該代碼非常長。 – 2012-03-26 22:17:45
提示:你不能用==比較C中的字符串 – antlersoft 2012-03-26 22:18:25