c语言程序出现ld returned 1 exit status怎么搞?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言程序出现ld returned 1 exit status怎么搞?相关的知识,希望对你有一定的参考价值。

这是详细代码
#include <stdio.h>
typedef struct g

int gcode;
int ecode;
char name[100];
int num;
int price;
Goods;
Goods goods[100];
int main()

int n,i,j,tmp;
printf("请输入商品个数:\n");
scanf("%d\n",&n);
for (i = 0; i < n; i++)

printf("请依次输入商品编号、商品类别编号、商品名称、库存数量、单价,并用空格隔开:\n");
scanf("%d\t%d\t%c\t%d\t%d\n",&goods[i].gcode,&goods[i].ecode,&goods[i].name[100],&goods[i].num,&goods[i].price);

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

for(j=0;j<n-i-1;j++)

if(goods[j].num>goods[j+1].num)

tmp=goods[j].num;
goods[j].num=goods[j+1].num;
goods[j+1].num=tmp;



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

printf("%d\t%d\t%c\t%d\t%d\n",goods[i].gcode,goods[i].ecode,goods[i].name[100],goods[i].num,goods[i].price);

return 0;

主要以下几点问题:

    单价使用float price,读取时使用%f,输出时%.2f;

    scanf问题:读取时最好不要加字符或\\n不然会需要完全匹配间隔符号才能读取到。读取字符串时使用%s,goods[i].name数组名name就是地址不需要地址符 &

    scanf("%d%d%s%d%f", &goods[i].gcode, &goods[i].ecode, goods[i].name, &goods[i].num, &goods[i].price);//C语言的写法

    scanf_s("%d%d%s%d%f", &goods[i].gcode, &goods[i].ecode, goods[i].name,100, &goods[i].num, &goods[i].price);//C++需要使用_s函数同时紧跟其后标明字符串大小100。

    你是要按商品数量排序,函数里面交换的是结构体变量,而不是其中数量一项。tmp定义为结构体变量Goods tmp,下面循环中if语句更正:

    请点击输入图片

#include "stdafx.h"

#include <iostream>

using namespace std;

typedef struct g

int gcode;

int ecode;

char name[100];

int num;

float price;

Goods;

Goods goods[100];

int main()

int n, i, j;// tmp;

Goods tmp;

printf("请输入商品个数:\\n");

scanf_s("%d", &n);

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

printf("请依次输入商品编号、商品类别编号、商品名称、库存数量、单价,并用空格隔开:\\n");

scanf_s("%d%d%s%d%f", &goods[i].gcode, &goods[i].ecode, goods[i].name,100, &goods[i].num, &goods[i].price);

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

for (j = 0; j<n - i - 1; j++)

if (goods[j].num>goods[j + 1].num)

//tmp = goods[j].num;

//goods[j].num = goods[j + 1].num;

//goods[j + 1].num = tmp;

tmp = goods[j];

goods[j] = goods[j + 1];

goods[j + 1] = tmp;

printf("商品编号\\t商品类别\\t商品名称\\t库存数量\\t单价\\n");

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

printf("%d\\t\\t%d\\t\\t%s\\t\\t%d\\t\\t%.2f\\n", goods[i].gcode, goods[i].ecode, goods[i].name, goods[i].num, goods[i].price);

system("pause");

return 0;

参考技术A

//代码有改动,请复制粘贴后编译运行,在此之前,请不要修改,切切!!!

#include <stdio.h>


typedef struct g

int gcode;

int ecode;

char name[100];

int num;

int price;

Goods;


Goods goods[100];


int main()

int n,i,j;

Goods tmp;

printf("请输入商品个数:\\n");

scanf("%d",&n);

printf("请依次输入商品编号、商品类别编号、商品名称、库存数量、单价,并用空格隔开:\\n");

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

scanf("%d%d%s%d%d",&goods[i].gcode,&goods[i].ecode,goods[i].name,&goods[i].num,&goods[i].price);

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

for(j = i;j < n - 1;j++)

if(goods[j].num > goods[j + 1].num)

tmp = goods[j];

goods[j] = goods[j + 1];

goods[j + 1] = tmp;

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

printf("%d\\t%d\\t%s\\t%d\\t%d\\n",goods[i].gcode,goods[i].ecode,goods[i].name,goods[i].num,goods[i].price);

return 0;

参考技术B 这种情况一般就是你把程序上次运行的黑框框没有关掉。
只要关掉上次运行完的黑框框就好了。本回答被提问者和网友采纳
参考技术C

出现严重的bug应该进行线性调试

完美解决:/usr/bin/ld: cannot find -lc collect2: error: ld returned 1 exit status问题

使用命令
1.LD_DEBUG=all make

2.ld -lzlib --verbose

3.sudo ln -s /usr/lib/libz.so.1.2.8 /usr/lib/libzlib.so

参考:https://stackoverflow.com/questions/16710047/usr-bin-ld-cannot-find-lnameofthelibrary

以上是关于c语言程序出现ld returned 1 exit status怎么搞?的主要内容,如果未能解决你的问题,请参考以下文章

Qt编译中出现collect2.exe:-1: 错误:error: ld returned 1 exit status

QT C++新手问题:collect2:ld returned 1 exit status

error: ld returned 1 exit status

完美解决:/usr/bin/ld: cannot find -lc collect2: error: ld returned 1 exit status问题

完美解决:/usr/bin/ld: cannot find -lc collect2: error: ld returned 1 exit status问题

完美解决:/usr/bin/ld: cannot find -lc collect2: error: ld returned 1 exit status问题