鱼C论坛

 找回密码
 立即注册
查看: 2630|回复: 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中点击右上角运行,终端显示如下:
  1. (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 }
  2. C:\Users\MWan\AppData\Local\Temp\cclEUuQi.o:test.c:(.text+0x0): multiple definition of `main'        
  3. C:\Users\MWan\AppData\Local\Temp\cco2wEvO.o:1.1.c:(.text+0x0): first defined here
  4. C:\Users\MWan\AppData\Local\Temp\cc6n10yT.o:test1_4.c:(.text+0x0): multiple definition of `main'     
  5. C:\Users\MWan\AppData\Local\Temp\cco2wEvO.o:1.1.c:(.text+0x0): first defined here
  6. collect2.exe: error: ld returned 1 exit status
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-6-13 17:41:16 | 显示全部楼层
看起来像是你定义了多个main函数
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

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

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

  3. struct List
  4. {
  5.         int i;
  6.         struct List *next;
  7. };

  8. void input(struct List a,struct List b,int i)
  9. {
  10.         struct List *xin_a;
  11.         struct List *temp1;
  12.         struct List *xin_b;
  13.         struct List *temp2;
  14.       
  15.         xin_a=(struct List *)malloc(sizeof(struct List));
  16.         xin_b=(struct List *)malloc(sizeof(struct List));
  17.       
  18.         if(xin_a==NULL&&xin_b==NULL)
  19.         {
  20.                 printf("内存分配失败:\n");
  21.                 exit(1);
  22.         }
  23.         xin_a->i =i;
  24.         xin_b->i =i;      
  25.       
  26.         if(*a==NULL)
  27.         {
  28.                 *a=xin_a;
  29.                 xin_a->next =NULL;
  30.         }
  31.         else
  32.         {
  33.                 temp1=*a;
  34.                 while(temp1->next !=NULL)
  35.                 {
  36.                         temp1=temp1->next ;
  37.                 }
  38.                 temp1->next=xin_a;
  39.                 xin_a->next =NULL;
  40.         }
  41.       
  42.       
  43.         if(*b==NULL)
  44.         {
  45.                 *b=xin_b;
  46.                 xin_b->next =NULL;
  47.         }
  48.         else
  49.         {
  50.                 temp2=*b;
  51.                 *b=xin_b;
  52.                 xin_b->next =temp2;
  53.         }
  54. }

  55. int determine(struct List *a,struct List *b)
  56. {
  57.         while(a!=NULL&&b!=NULL)
  58.         {
  59.                 if(a->i !=b->i)
  60.                 {
  61.                         return 0;
  62.                         break;
  63.                 }
  64.                 a = a->next;
  65.                 b = b->next;
  66.         }
  67.         if(a!=NULL || b!=NULL)
  68.             return 0;
  69.         return 1;
  70. }

  71. void print(struct List *a)
  72. {
  73.         struct List *cur;
  74.         cur=a;
  75.       
  76.         while(cur!=NULL)
  77.         {
  78.                 printf("%d ",cur->i );
  79.                 cur=cur->next ;
  80.         }
  81. }

  82. int main(void)
  83. {
  84.         struct List *a=NULL;
  85.         struct List *temp1=NULL;
  86.         struct List *b=NULL;
  87.         struct List *temp2=NULL;
  88.       
  89.         int i;
  90.         while(1)
  91.         {
  92.                 printf("请输入一个整数(输入-1表示结束):");
  93.                 scanf("%d",&i);
  94.                 if(i==-1)
  95.                 {
  96.                         break;
  97.                 }
  98.                 else
  99.                 {
  100.                         input(&a,&b,i);
  101.                 }
  102.         }
  103.       
  104.         printf("你输入的单链表是: ");
  105.         print(a);
  106.         putchar('\n');
  107.         if(determine(a,b))
  108.         {
  109.                 printf("录入的单链表是回文数列!\n");
  110.         }
  111.         else
  112.         {
  113.                 printf("录入的单链表不是回文数列!\n");
  114.         }
  115.         while(a!=NULL)
  116.         {
  117.                 temp1=a->next ;
  118.                 free(a);
  119.                 a=temp1;
  120.         }
  121.         while(b!=NULL)
  122.         {
  123.                 temp2=b->next ;
  124.                 free(b);
  125.                 b=temp2;
  126.         }
  127.         return 0;
  128. }
复制代码


求最佳答案
小甲鱼最新课程 -> https://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 来运行编译好的程序。

希望以上的建议能帮助你解决问题!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

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

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

如果您满意,请点击右下角设置最佳答案
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-21 12:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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