语法错误在在程序编译时编译器会报错,编译不能通过,清乎弊此类错误如:变量使用时尚未定义,符号错误等等。可以根据编译器的提示查看错误。
而逻辑错误主要是程序在逻辑上出现问题,此类错误编译能通过,但是程序运行起来未必会得到所期望得到的结果。如:计算1到100所有数字的和,在写for循环时错写成for(i=1i<100i++)这样100就没有加进去了,这就是逻辑错误。逻辑错误的查找通常采用调试的方式。比如,在Visual Studio C++中,你可以在运行结果不正确的代码段中设置断点,调试运行(F5),单步执行程序,观察执行过程中变量的值,直至找到出错的地方。
这段c语言的程序实现传递结构变量给子函数,但是出错在于:结构变量初始化时出错:结构指针未指向一有效位置即赋值,需要在此之前给它一个可用的地唤猜址(在main函数的开昌顷头添加2句即可:struct student stugstu=&stug;
)
修改后的代码如下,总共有30行:
#include<stdio.h>
struct object{
float Chinese float Math
float English}obj
struct student{
int numchar*name
struct object obj
} *stu
int main (void){
void print(struct student *p)
struct student stug
/*struct student stu={8, "JJ Lin", {98. 5, 90.0,95. 5}}*/
stu=&stug
/*结构的指针使用前要赋值*/
stu->num=8
stu->name="JJ Lin"
stu->obj.Chinese=90
stu->obj.English=90
stu->obj.Math=90
print(stu)/*函和迅型数调用结构体变量做形参*/
return 0
}
void print (struct student *p){
printf ("'num:%d'\n", (*p). num)
printf ("'name:%s'\n", (*p). name)
printf ("Chinese score :%.1lf'\n", (*p).obj. Chinese)
printf (" 'Math score:%.1f'\n", p->obj. Math)
printf ("English score :%.1f'\n" , p->obj. English)
}
我不会C++,我把你的代码修改了一下。
运行效果如下:
下面是C语言版的代码,我添加了一个遍历函数,可以把输入的内容打印喊氏出来。
可以把它和你原弊巧来的代码对比一下。
if(!m) cout<<"创建失郑卜散败"return ERROR
这一句导致你的程序直接退出,因为从语法上讲,if只对它后面的第一个语句或语句块起作用,
对第二个句return ERROR不起任何作用,导致程序直接return,退出。
其他语法上的问题,你多多参考其他资料吧,对我来说,C语言太不好用了。
#include<malloc.h>
#include<stdio.h>
#include<stdlib.h>
#include<stdio.h>
/*#include<string.h>*/
/*#include<iostream>*/
/*using namespace std*/
#define length 100
#define OK 1
#define ERROR 0
#define OVERFLOW 26547
extern char *strcpy(char* dest, const char *src)
int strcmp ( const char * str1, const char * str2 )
void clearKeyboardBuffer() {
char ch
while ((ch = getchar() != '\n') &&(ch != EOF))
}
typedef int status
typedef struct city
{
char cityname[10]
int x
int y
struct city *next
}city,*chengshi
status initcitylist(chengshi c)
{
strcpy(c->cityname,"kong")
/*c->cityname="kong" error*/
c->x=0
c->y=2
c->next=NULL
return OK
}
status scanfcitylist(chengshi c)
{
printf("city name:\n")
scanf("%s",c->cityname)
clearKeyboardBuffer()
/* while(c->cityname!="over")*/
while (strcmp(c->cityname,"over") != 0)
{
printf("x:\n")
scanf("%d",&c->x)
clearKeyboardBuffer()
printf("y:\n")
scanf("%d",&c->y)
clearKeyboardBuffer()
city *m=(city*)malloc(sizeof(city))
if(!m)
{
printf("创建失败")return ERROR //you wrong here
}
strcpy(m->cityname,c->cityname)
m->x=c->x
m->y=c->y
m->next=c->next
c->next=m
printf("city name:\n")
scanf("%s",c->cityname)
clearKeyboardBuffer()
}
return OK
}
int tranverse_list(chengshi c)
{
city *b
b=c
if (b->next != NULL)
{
b=b->next
tranverse_list(b)
printf ("city name is: %s\n",b->cityname)
printf ("x is: %d\n",b->x)
printf ("y is: %d\n",b->y)
}
return 0
}
int main()
{ chengshi c
c=(city *)malloc(sizeof(city))
initcitylist(c)
printf ("create linear table\n")
scanfcitylist(c)
tranverse_list(c)
return OK
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)