【问题标题】:Can someone spot the errors in my code? I don't know what part am I missing and what I messed up有人可以发现我的代码中的错误吗?我不知道我错过了什么以及我搞砸了什么
【发布时间】:2021-11-01 08:57:33
【问题描述】:

我想要的示例输出:

chocolate bar   $1.00
skittles        $1.20
marshmellows    $5.00
candy-cane      $0.90

我得到的输出:

░"@  $1.00
░"@  $1.20
░"@  $5.00
░"@  $0.90

我制作的代码:

#include <stdio.h>
void ShowMenu();
int main()
{
    int i, j;
    float price[4][1]= {1,1.2,5,0.9};
    char snack[4][20];
    
    ShowMenu(price, i, j, snack);
    
    return 0;
}

void ShowMenu(float price[4][1], int i, int j, char snack[4][20])
{
    for (i=0;i<4;i++)
        for (j=0;j<1;j++)
            {
            if(i==0)
            snack[0][20]=="chocolate bar" ;
            else if(i==1)
            snack[1][20]=="skittles"  ;
            else if(i==2)
            snack[2][20]=="marshmellows"  ;
            else if(i==3)
            snack[3][20]=="candy-cane"  ;
            printf("%s  RM%.2f\n", snack, price[i][j]);
            }
}

【问题讨论】:

  • 我看不出有一个一维只有[1]的二维数组和一个只执行一次的循环。
  • 你不能分配给snack[0][20] ... snack[0][20]不存在snack[0] 有 20 个元素:snack[0][0]snack[0][1]、...、snack[0][19],每个元素都是一个字符。 (你想要snack[0][0] = 'c'; snack[0][1] = 'h', /*...*/ snack[0][14] = '\0';strcpy(snack[0], "chocolate bar");
  • 请打开完整的编译器警告并从那里开始。特别是,您不能用= 分配C 中的字符串(初始化除外)或将C 中的字符串与== 进行比较,请使用strcmp()。这看起来是使用 struct 与一个成员 price 和另一个 snack 的好案例。
  • 此外,显示的输入/输出与该代码不一致(RM vs $)。

标签: c multidimensional-array


【解决方案1】:
  1. 您的函数原型必须*完全与您的定义相同!!!
  2. 很难理解许多变量和参数的用途。我已经剥离了所有不需要的东西
void ShowMenu(float price[], char *snack[], int nitems);
int main(void)
{
    float price[4] = {1,1.2,5,0.9};
    char *snack[20] = {"chocolate bar", "skittles", "marshmellows", "candy-cane"};
    
    ShowMenu(price, snack, 4);
    
    return 0;
}

void ShowMenu(float price[], char *snack[], int nitems)
{
    for (int i = 0; i < nitems; i++)
    {
        printf("%s\tRM%.2f\n", snack[i], price[i]);
    }
}

【讨论】:

  • 关于“您的函数原型必须*与您的定义完全相同!!!”:这是不正确的。定义中的参数与默认参数提升后的参数兼容,因此根据 C 2018 6.5.2.2 6 定义了行为。
  • @EricPostpischil 牢记这个问题的水平。对于 OP 来说,经验法则是它们必须相同以避免难以为他找到错误。
  • 这个答案没有解释原程序出了什么问题。它甚至没有解释为什么新程序有效。 Stack Overflow 不应该是为学生提供代码的服务;它应该回答问题并提供信息。这个答案失败了。
  • @EricPostpischil DV 然后
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-17
  • 2012-05-19
相关资源
最近更新 更多