【问题标题】:Can anyone help me identify the error in my last function?谁能帮我找出我上一个函数中的错误?
【发布时间】:2020-12-20 18:08:47
【问题描述】:

我已经编写了这个程序(它还没有完成,还有更多功能要添加)但是,我想知道为什么我的 insideBudget 函数有时会产生正确的结果,而有时会产生不准确的结果。 insideBudget 计算出客户是否有足够的余额。如果返回 true 则打印购买成功或打印余额不足。

#include <stdio.h> 

int isItemExist(char itemPrefixes[], char itemPrefix);
void displayMenu(char itemPrefixes[], int itemPrices[], int n);
int withinBudget(int budget, char itemPurchased, char itemPrefixes[], int itemPrices[]);


int n;


int main() {

char itemPrefixes[5];
int itemPrices[5];
int budget = 0;
char itemPurchased;

printf("***ItemPrefixes***");
printf("\nA: Apple\n");
printf("O: Orange\n");
printf("M: Mango\n");
printf("P: Pear\n");
printf("G: Grapes\n");

printf("\n***ShopKeeperPanel***");
printf("\nHow many fruit items do you want to add to the shop?: ");
scanf_s("%d", &n);

int chosenFruitItem = 0;
while (chosenFruitItem < n) {

printf("\n(%d) Enter the item prefix: ", chosenFruitItem + 1);
char itemPrefix = ' ';
scanf_s(" %c", &itemPrefix, 1);
if (isItemExist(itemPrefixes, itemPrefix) == 1) {
printf("Error Item already exist");
continue;
}
else {
itemPrefixes[chosenFruitItem] = itemPrefix;

printf("Enter price for item (%c): ", itemPrefix);
scanf_s("%d", &itemPrices[chosenFruitItem]);
chosenFruitItem++;

}




}

displayMenu(itemPrefixes, itemPrices, n);

printf("\n**CUSTOMER PANEL***");
printf("\nWhat is your budget for today?: ");
scanf_s("%d", &budget);

printf("\nPlease enter Item Prefix from the menu to purchase: ");
scanf_s(" %c", &itemPurchased, 1);

if (withinBudget(budget, itemPurchased, itemPrefixes, itemPrices) == 1) {

printf("PURCHASS SUCCESS");
}
else
{
printf("INSUFFICENT BUDGET");
}




}

int isItemExist(char itemPrefixes[], char itemPrefix) {

for (int i = 0; i < n; i++) {

if (itemPrefixes[i] == itemPrefix) {
return 1;
}
}

return 0;


}

void displayMenu(char itemPrefixes[], int itemPrices[], int n) {

printf("\n*** ShopMenu ***");
printf("\nItem: \t Price: ");

for (int i = 0; i < n; i++) {

printf("\n%c:\t %d", itemPrefixes[i], itemPrices[i]);

}}

int withinBudget(int budget, char itemPurchased, char itemPrefixes[], int itemPrices[]) {

for (int i = 0; i < n; i++) {

if (itemPurchased == itemPrefixes[i] && itemPrices[i] < budget)
{
return 1;
}

return 0;

}




}

输出:

【问题讨论】:

  • Sulekha,发布示例输入、看到的输出和预期的输出会有所帮助。
  • 我现在尝试添加它
  • 最好将文本发布为文本而不是图片。
  • @chux-ReinstateMonica 说实话,我不知道你到底想让我做什么
  • 编译器警告:'withinBudget':并非所有控制路径都返回值。您将return 0 放在错误的位置,使用正确格式的代码很明显;)。我认为逻辑可能也需要注意。

标签: arrays c function


【解决方案1】:

请识别您的代码。因此,任何最简单的错误都可能被忽视。

Here你有一个自动的。

对您的代码执行此操作后,这是最后一个函数:

int withinBudget(int budget, char itemPurchased, char itemPrefixes[], int itemPrices[]) {

  for (int i = 0; i < n; i++) {

    if (itemPurchased == itemPrefixes[i] && itemPrices[i] < budget) {
      return 1;
    }

    return 0;

  }

}

如您所见,return 0 处于循环内部,它仅在 itemPurchased == itemPrefixes[0] &amp;&amp; itemPrices[0] &lt; budget 工作时才有效,因为 i 永远不会增加。

所以你的功能应该是:

int withinBudget(int budget, char itemPurchased, char itemPrefixes[], int itemPrices[]) {

  for (int i = 0; i < n; i++) {

    if (itemPurchased == itemPrefixes[i] && itemPrices[i] < budget) {
      return 1;
    }
  }

  return 0;

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-28
    • 2019-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-11
    • 1970-01-01
    • 2018-11-26
    相关资源
    最近更新 更多