You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言编译报错:type specifier missing,如何修复?

快餐车计价程序编译错误修复

编译错误信息

fatal error: too many errors emitted, stopping now [-ferror-limit=]
2 errors generated.
make: *** [<builtin>: snackbar] Error 1
chapter3/snackbar/ $ make snackbar
snackbar.c:52:1: error: type specifier missing, defaults to 'int' [-Werror,-Wimplicit-int]
menu[0].item = "burger";

问题根源

报错的核心原因是在全局作用域中直接执行变量赋值语句。C语言规定,全局作用域仅允许存在变量、函数的声明与初始化代码,独立的赋值操作(比如menu[0].item = "burger";)必须放在函数内部执行。

同时你的代码存在逻辑冗余:已经通过初始化列表给menu数组填充了完整的预设菜单数据,却又重复在全局区域写赋值语句;且add_items函数的逻辑是让用户重新输入所有菜品名称,这和程序"预设菜单、用户点单"的功能目标冲突。

修复步骤

  1. 删除全局区域中所有直接给menu数组元素赋值的代码(即从menu[0].item = "burger";到menu[3].price = 7;的所有行)
  2. 移除冗余的add_items函数声明与调用,因为初始化列表已经完成了预设菜单的填充,无需重复让用户输入菜品名称。

修复后的完整代码

// Find your total cost at a snackbar

/**
 * Beach Burger Shack has the following 10 items on their menu
 * Burger: $9.5
 * Vegan Burger: $11
 * Hot Dog: $5
 * Cheese Dog: $7
 * Fries: $5
 * Cheese Fries: $6
 * Cold Pressed Juice: $7
 * Cold Brew: $3
 * Water: $2
 * Soda: $2
*/

#include <cs50.h>
#include <ctype.h>
#include <stdio.h>
#include <string.h>
#include <strings.h>

// Number of menu items
#define NUM_ITEMS 10

// Menu items have item name and price
typedef struct
{
    string item;
    float price;
}
menu_item;

// Array of menu items
menu_item menu[NUM_ITEMS] = {
    {"Burger", 9.5},
    {"Vegan Burger", 11},
    {"Hot Dog", 5},
    {"Cheese Dog", 7},
    {"Fries", 5},
    {"Cheese Fries", 6},
    {"Cold Pressed Juice", 7},
    {"Cold Brew", 3},
    {"Water", 2},
    {"Soda", 2},
};

// Calculate total cost
float get_cost(string item);

int main(void)
{
    printf("\nWelcome to Beach Burger Shack!\n");
    printf("Choose from the following menu to order. Press enter when done.\n\n");

    for (int i = 0; i < NUM_ITEMS; i++)
    {
        printf("%s: $%.2f\n", menu[i].item, menu[i].price);
    }
    printf("\n");

    float total = 0;
    while (true)
    {
        string item = get_string("Enter a food item: ");
        if (strlen(item) == 0)
        {
            printf("\n");
            break;
        }

        total += get_cost(item);
    }

    printf("Your total cost is: $%.2f\n", total);
}

// Search through the menu array to find an item's cost
float get_cost(string item)
{
    // Linear search for item
    for (int i = 0; i < NUM_ITEMS; i++)
    {
        if (strcasecmp(menu[i].item, item) == 0)
        {
           return menu[i].price;
        }
    }
    // Item was not found
    return 0.0;
}

效果说明

修复后的程序会直接加载预设菜单,提示用户选择菜品,输入回车即可结束点单并计算总费用,完全符合功能需求,且能正常编译运行。

内容的提问来源于stack exchange,提问作者Tyler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 18:50:42