鱼C论坛

 找回密码
 立即注册
查看: 1875|回复: 4

VScode无法使用Code Runner插件运行代码

[复制链接]
发表于 2023-6-13 17:36:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 K.SMW 于 2023-6-13 17:36 编辑

本人新手,刚刚根据站内教程贴配置c语言运行环境,但一直无法实现使用Code Runner插件运行代码
环境配置参考链接为:https://fishc.com.cn/thread-203417-1-1.htmlhttps://fishc.com.cn/thread-224194-1-1.html


在VScode中点击右上角运行,终端显示如下:
(base) PS D:\Code\C\C-Traps and Pitfalls> cd "d:\Code\C\C-Traps and Pitfalls\chapter1" ; if ($?) { gcc *.c -o test } ; if ($?) .c -o test } ; if ($?) { .\test } ; if ($?) { del .\test.exe }
C:\Users\MWan\AppData\Local\Temp\cclEUuQi.o:test.c:(.text+0x0): multiple definition of `main'        
C:\Users\MWan\AppData\Local\Temp\cco2wEvO.o:1.1.c:(.text+0x0): first defined here
C:\Users\MWan\AppData\Local\Temp\cc6n10yT.o:test1_4.c:(.text+0x0): multiple definition of `main'     
C:\Users\MWan\AppData\Local\Temp\cco2wEvO.o:1.1.c:(.text+0x0): first defined here
collect2.exe: error: ld returned 1 exit status
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-6-13 17:41:16 | 显示全部楼层
看起来像是你定义了多个main函数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-13 18:09:49 | 显示全部楼层
这段代码的问题可能不在于malloc申请的空间不连续,而是在输入链表时并没有把头结点传入函数中,而是直接将其赋值为NULL。

当输入第一个节点时,虽然会动态地分配了一个空间给a或者b,但因为它们本身都是NULL,所以新的节点并没有与之前的节点相连。因此在输出链表时,只输出了输入最后一个有效节点,而在判断回文时,则会出现访问NULL指针的错误。

要解决此问题,可以在main函数中分别给a和b设置一个头结点,并将其传入input函数中。在input函数中,首先通过头指针找到链表的末尾,再插入新的节点。

修改后的代码如下:
#include<stdio.h>
#include<stdlib.h>

struct List
{
        int i;
        struct List *next;
};

void input(struct List a,struct List b,int i)
{
        struct List *xin_a;
        struct List *temp1;
        struct List *xin_b;
        struct List *temp2;
       
        xin_a=(struct List *)malloc(sizeof(struct List));
        xin_b=(struct List *)malloc(sizeof(struct List));
       
        if(xin_a==NULL&&xin_b==NULL)
        {
                printf("内存分配失败:\n");
                exit(1);
        }
        xin_a->i =i;
        xin_b->i =i;       
       
        if(*a==NULL)
        {
                *a=xin_a;
                xin_a->next =NULL;
        }
        else
        {
                temp1=*a;
                while(temp1->next !=NULL)
                {
                        temp1=temp1->next ;
                }
                temp1->next=xin_a;
                xin_a->next =NULL;
        }
       
       
        if(*b==NULL)
        {
                *b=xin_b;
                xin_b->next =NULL;
        }
        else
        {
                temp2=*b;
                *b=xin_b;
                xin_b->next =temp2;
        }
}

int determine(struct List *a,struct List *b)
{
        while(a!=NULL&&b!=NULL)
        {
                if(a->i !=b->i)
                {
                        return 0;
                        break;
                }
                a = a->next;
                b = b->next;
        }
        if(a!=NULL || b!=NULL)
            return 0;
        return 1;
}

void print(struct List *a)
{
        struct List *cur;
        cur=a;
       
        while(cur!=NULL)
        {
                printf("%d ",cur->i );
                cur=cur->next ;
        }
}

int main(void)
{
        struct List *a=NULL;
        struct List *temp1=NULL;
        struct List *b=NULL;
        struct List *temp2=NULL;
       
        int i;
        while(1)
        {
                printf("请输入一个整数(输入-1表示结束):");
                scanf("%d",&i);
                if(i==-1)
                {
                        break;
                }
                else
                {
                        input(&a,&b,i);
                }
        }
       
        printf("你输入的单链表是: ");
        print(a);
        putchar('\n');
        if(determine(a,b))
        {
                printf("录入的单链表是回文数列!\n");
        }
        else
        {
                printf("录入的单链表不是回文数列!\n");
        }
        while(a!=NULL)
        {
                temp1=a->next ;
                free(a);
                a=temp1;
        }
        while(b!=NULL)
        {
                temp2=b->next ;
                free(b);
                b=temp2;
        }
        return 0;
}

求最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-13 19:21:35 | 显示全部楼层
你在运行Code Runner时遇到的问题是由于你试图使用GCC编译器编译当前目录下的所有C源代码文件( *.c )。然而,你的项目里有多个文件都定义了一个 main 函数,这造成了编译错误。

一个C程序只能有一个 main 函数作为程序的入口点。多个 main 函数在同一个项目中会导致编译器不知道应该从哪个 main 函数开始执行程序。

为了解决这个问题,你有几个选择:

1. 修改Code Runner的配置,让它只编译和运行当前打开的文件。打开VS Code的设置(File -> Preferences -> Settings),然后在搜索框中输入 code-runner.runInTerminal 。把这个设置的勾选取消,这样Code Runner就会在一个新的终端窗口中运行代码,而不是试图编译整个目录的代码。

2. 改变你的源文件的结构,确保只有一个文件定义了 main 函数。其它的C源文件可以定义你的函数和数据结构,然后你可以在主程序文件中包含这些文件并调用它们定义的函数。这是一个更标准的方式来组织你的C代码,也可以避免你遇到的这个问题。

3. 手动编译和运行你的代码,而不是使用Code Runner插件。在终端中,你可以使用 gcc your_file_name.c -o output_name 来编译单个的C源文件,然后用 ./output_name 来运行编译好的程序。

希望以上的建议能帮助你解决问题!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-29 07:10:31 | 显示全部楼层
根据你提供的信息,可能是由于多个源文件中存在重复定义的 `main` 函数导致的编译错误。在 C 语言中,每个程序只能有一个 `main` 函数作为入口。

解决该问题的方法是确保在你的项目中只有一个源文件包含了 `main` 函数。请检查你的项目中是否有多个源文件同时包含了 `main` 函数并进行相应的修改。

另外,还需要确认你是否正确安装了 Code Runner 插件,并且已经按照教程中的步骤配置了 C 语言的运行环境。

如果问题仍然存在,请提供你的代码和项目结构,以便更详细地分析和帮助你解决问题。

如果您满意,请点击右下角设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-24 07:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表