小白不懂,#include<stdio.h>不是c的头文件吗?为什么用C提交不正确,用C++却正确

程序如下:
#include
const int max_num=100010;
typedef struct
{
int num,root,conn;//数据,根结点,入度
}Node;
Node node[max_num];

void init()//初始化
{
for(int i=0;i<max_num;i++)
{
node[i].conn=0;//入度初始化为0
node[i].root=i;//根结点为自身
node[i].num=0;//标记数字是否用过。0-没用过,1-用过
}
}

int find(int a)//寻找它的根节点
{
if(node[a].root!=a)
return node[a].root=find(node[a].root);
else
return node[a].root;
}

void merge(int a,int b)//合并
{
a=find(a),b=find(b);
if(a==b)//同一个根,说明在同一棵树里
return;
node[b].root=a;//把b的根结点赋给a的根结点,此时a已经是根结点
}

int main()
{
int n,m,i=1;
bool flag=true;
init();
while(scanf("%d%d",&n,&m)!=EOF&&n>=0&&m>=0)
{
if(!flag&&n!=0&&m!=0)continue;//判断是否是树
if(n==0&&m==0)//说明输入结束,开始处理吧
{
int root_num=0;
for(int j=1;j {
//判断是否为森林。如果是,用root_num来记录根的数目
if(node[j].num&&find(j)==j)
root_num++;
if(node[j].conn>1)//如果出现某个节点的入度超过1,则不是树
{
flag=false;
break;
}
}
if(root_num>1)//连通分支大于1,是森林,不是树
flag=false;
if(flag)
printf("Case %d is a tree.\n",i++);
else printf("Case %d is not a tree.\n",i++);
init();//为下一个case处理进行初始化
continue;
}
if(m!=n&&find(n)==find(m)||m==n)
flag=false;
else
{
//将m,n记为结点
node[m].num=1;
node[n].num=1;
node[m].conn++;//入度加一
merge(n,m);
}
}
return 0;
}

报错问题:
Options->Directories->Include directories:
看看你的Include文件夹和所设置的是否一样。
不一样,改过来。
Options->Save options->CR

另外 c是c++的子集,所以大部c语言程序都可以不加修改的拿到c++下使用。

1 提交代码请使用代码格式,否则 <  or  >都会被认为是HTML字符,会被去掉.
2 C语言和C++ 有好多标准,比如C89 C99 ,C++ 也有好多标准,不同的标准支持的语法不同。C++最新的有 C11 C14 C17
3 对于数组维度,C语言不能用变量,C++中可以使用常量
4 
if(n==0&&m==0)//说明输入结束,开始处理吧 
{
int root_num=0;
for(int j=1;j {

这个地方代码有问题,编译不过,没法找问题了。

c++是 完全兼容c的,,但是c不能兼容c++

你代码里面可能用到,c++的特性了,,不仅仅是头文件问题,,c++头文件也可以这样引入。

const int max_num=100010;,,,这些在函数外的语句,,看着好不顺眼,,常量用#define定义
先,把函数外的代码统统处理掉试试。