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

C语言编译报linker command failed with exit code 1错误如何解决

报错根本原因

你遇到的三个链接错误都是语法和函数定义规则错误导致的:

  • undefined reference to 'N':你开头用extern char (N[][40]);声明了一个外部全局变量N,但你的代码里从来没有在全局作用域定义过这个变量,链接器找不到对应的实体就报错,这个extern声明完全是多余的,直接删掉即可。
  • undefined reference to 'Digitanome'/undefined reference to 'Lista':C语言不允许嵌套定义函数,你把这两个函数的实现写在了main函数内部,这不被标准C支持,你提前声明的是全局作用域的两个函数,链接器找不到对应的全局实现就报错。

除此之外你的代码还有大量逻辑错误,无法实现需求:

  • 你在main函数里写的int Digitanome(char N[][40], int i);后面的块不是合法的函数定义,里面还递归调用Digitanome会直接触发死循环
  • 你在输入商品名的逻辑后面直接写了return 0;,后面输入价格、是否继续购买的代码完全不会执行
  • 你只用了一个Supermercado compra全局变量,每次输入新商品都会覆盖旧商品的信息,根本无法保存商品列表
  • soma2是int类型,累加float类型的商品价格会丢失小数精度,打印用%i也不符合类型要求
  • strcpy用法错误,*compra.seçao = *strcpy(compra.seçao,"Frutas");等同于只复制字符串的第一个字符给seçao的第一个元素,直接写strcpy(compra.seçao,"Frutas")即可

修复步骤

  1. 删除开头多余的extern char (N[][40]);声明
  2. 把Digitanome、Lista两个函数的实现移到main函数外部,禁止嵌套在main里
  3. 定义一个Supermercado数组来存储所有购买的商品,不要只用单个变量
  4. 删除main函数里中途的return 0;语句,让后续逻辑能正常执行
  5. 把soma2的类型改成float,打印的时候用%.2f格式化输出保留两位小数
  6. 移除strcpy前面的多余指针操作,修正字符串复制逻辑
  7. 修正Lista函数的打印逻辑,遍历存储商品的数组输出所有商品

参考修复代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_PROD 100 // 支持的最大商品数量

typedef struct {
    char produto[30];
    char seçao [30];
    float preco;
}Supermercado;

// 函数定义移到main外部
int Digitanome(char N[][40], int i) {
    printf("Informe o produto que você quer nesta seção: \n");
    scanf("%s", N[i]);
    return ++i;
}

void Lista(Supermercado compras[], int qtd) {
    int j = 0;
    printf("\n=== 商品列表 ===");
    for (; j < qtd; j++ ) {
        printf("\n分类:%s | 商品名:%s | 价格:%.2f", compras[j].seçao, compras[j].produto, compras[j].preco);
    }
    printf("\n================");
}

int main(void)
{
    Supermercado compras[MAX_PROD];
    int qtdNomes = 0;
    float soma2 = 0;
    int cod, cont;
    char Nome[100][40] = { '\0' };

    do{  
        printf("\n\nEm qual seção está seu produto?");
        printf("\n1-Frutas \n2-Doces \n3-Material de Limpeza\n -->  ");
        scanf("%d",&cod);
        if(cod == 1){
            strcpy(compras[qtdNomes].seçao,"Frutas");
        } else if(cod == 2){
            strcpy(compras[qtdNomes].seçao, "Doces");
        } else if(cod == 3){
            strcpy(compras[qtdNomes].seçao,"Material de Limpeza");
        }

        qtdNomes = Digitanome(Nome, qtdNomes);
        strcpy(compras[qtdNomes-1].produto, Nome[qtdNomes-1]);

        printf("Informe o preço do produto: \n");
        scanf("%f", &compras[qtdNomes-1].preco);
        soma2 = soma2 + compras[qtdNomes-1].preco;

        printf("\nDeseja mais algum produto? \n4-Sim \n0-Não, sair \n -->  ");
        scanf("%d",&cont);
    }while(cont == 4 && qtdNomes < MAX_PROD);

    printf("\nFIM DAS COMPRAS!\n");
    Lista(compras, qtdNomes);
    printf("\nEssa compra está custando: %.2f \n", soma2);
    
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 16:27:02