vc6.0下C语言小例子运行出错。不用g函数直接用printf就没错了,帮忙看下错在哪?

#include<stdio.h>
#include<string.h>
void f(struct Student *pst);
void g(struct Student st);
struct Student
{
int sid;
char name[200];
int age;
};
int main()
{
struct Student st;
f(&st);
g(st);
system("pause");
return 0;
}

void f(struct Student *pst)
{
pst->sid=1000;
pst->age=22;
strcpy(pst->name,"zhangsan");
}

void g(struct Student st)
{
printf("%d %s %d\n",st.age,st.name,st.sid);
}
报错信息在此....
指针结构体函数调用.2.C
E:\C语言程序\指针结构体函数调用.2.C(4) : error C2079: 'st' uses undefined struct 'Student'
E:\C语言程序\指针结构体函数调用.2.C(16) : error C2115: 'function' : incompatible types

指针结构体函数调用.2.OBJ - 1 error(s), 0 warning(s)

改动:system("pause");  要增加头文件:

  #include <stdlib.h>

其他的编译没问题,通过,看结果:

问一下,你采用的什么编译器

追问

vc++ 6.0 我运行出错,难道是编译器的问题? 能不能把结构体定义的变量st,直接传给函数g()? 这样传递是消耗内存,但是不应该出错啊— —!

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-09-17

函数声明应该在结构体之后。使用的时候,注意先后,编译器是自上而下的。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>//system可能会用,Linux的GCC编译器不用也行。            
  
struct Student                  
{
    int sid;
    char name[200];
    int age;
};
void f(struct Student *pst);   
void g(struct Student st); 

int main()             
{
 struct Student st;          
  f(&st);                    
  g(st);                   
  system("pause");           
  return 0;
}

void f(struct Student *pst)     
{
    pst->sid=1000;               
    pst->age=22;
    strcpy(pst->name,"zhangsan");
}

void g(struct Student st)    
{
    printf("%d  %s  %d\n",st.age,st.name,st.sid); 
}

追问

...按照函数声明应该在结构体之后还真的就没有错误了,为什么有时候在函数声明在结构体之前不报错呢?

追答

这个问题我遇到过,就是这样解决的。不报错我就不知道,我不是编译器,有些编译器就这样。

本回答被提问者采纳
第2个回答  2013-09-17
你试试把你的g函数改成void g(struct Student *st)看看,多尝试一下。

...不用g函数直接用printf就没错了,帮忙看下错在哪?
改动:system("pause"); 要增加头文件:include <stdlib.h> 其他的编译没问题,通过,看结果:问一下,你采用的什么编译器

C语言问题,我的VC6.0为什运行是错的
1,) 变量要先声明后使用。把 max 的声明放到前面去。2) 注意,语句,标点符号用英文 ASCII 字符,不用 中文全角码。int a,b,max;printf("please input a b\\n");scanf("%d %d",&a,&b);max = b;if (a>b) max = a;printf("the bigger value is %d\\n",max);...

C语言求海伦公式的问题(VC6.0),编译没错运行却出错!
area 应为float,因为%f输出的是浮点型,所以应该将 area 定义为 float,而不是int。s改为float或者double都可以。如果s是 int 型的话,那么s=(a+b+c)\/2得到的结果是一个不精确整数,比如a=3,b=4,c=4;s应该为5.5,但由于s是int 型的,结果会是5,所以说s应改为float或double。建议改为...

VC++6.0执行cl.exe时出错
出错点有两个:第一个,在printf语句后本来应该有个分号的,但是程序代码里面没有;第二个,主函数应该是有个修饰词的,void或者int,但是程序代码没有标。正确代码如下:include <stdio.h>int main(){printf("hello,world\\n");} 在 C 程序中,分号是语句结束符。也就是说,每个语句必须以分号...

Visual C++ 6.0 C语言编程后生成的exe文件单独运行时,输入后按下回车没...
你用Windows搜索在VC目录下搜一下windows.h这个文件, 把所在的目录配到 好像是菜单Tools -> Option对话框的Directory页面里面, 具体的你自己选一下, 我图形界面的东西记不太清.命令行的方法(另一种方法):开始菜单 -> 运行. 然后输入cmd回车. 把你的程序拖到那个黑框里, 按回车. 应该就不会...

C语言程序运行出错,编译没有错误
错误有两点:1、需要给主函数一个函数返回值的类型,可以为void也可以是int 2、scanf函数的语法错了,少了&

C语言运行出错,怎么解决啊。
c语言运行出现 error C2065: 'printf' : undeclared identifier,是设置错误造成的,解决方法如下:1、首先打开点C语言软件,新建一个printf项目,添加一个printf.cpp文件。2、输入包含需要用到的头文件,如图所示。3、接着输入main函数,如图所示。4、printf作用:向控制台输出一段文本,使用printf函数...

我的VC++6.0运行老出错,该得正数的老得负数,代码都对,就是结果老错,不...
我帮你改了一下,有注释,你看看:include "stdio.h"void main(){ int x,n, s = 0;\/\/ 变量使用之前要初始化,否则会是一个随机值 printf("n=");scanf("%d",&n);x=1;while(x<=n){ s=s+x;x=x+1;} printf("1+2+...+%d=%d\\n",n,s);} 运行结果:...

对于C语言编程出了错,怎么能快速找出错误呢?
代码是否存在逻辑错误:1、变量使用前未被数值 实例:int main(){ int x=5,y,z;z=x*y;printf("%d",z);return 0;} 在此程序中变量y在使用之前未被赋值,所以结果输出z的值就会是系统随机分配一个值给y再加乘以x的值。2、把赋值赋值符号“=”与等于符号“==”相混淆 实例:有一下语句:...

C语言,帮忙看一下哪里错了?
错误有以下几处:1、第二行,改为:int GC(int a,int b,int c)。2、第四行和第五行,去掉。3 、第六行,改为:if(a==b&&b&&c)printf("为等边三角形\n");4、第七行改为:return 1;其他不用改,应该就好了。如果还不行请留言。

相似回答
大家正在搜