Aegis 发表于 2014-12-2 19:13:51

奇怪的问题

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>

#define LEN sizeof(struct student)

struct student *create();
void print(struct student *head);
struct student *del(struct student *head, int num);
int n;

struct student
{
        int num;
        float score;
        struct student *next;
};

int main()
{
        int delnum;

        struct student *stu;
        stu = create();
        print(stu);

        printf("Please input delete num:");
        scanf("%d", &delnum);
        del(stu, delnum);
        print(stu);

        system("pause");
}

struct student *del(struct student *head, int num)
{
        struct student *p, *pprev;

        pprev = p = head;
        if(head->num == num)
                head = head->next;

        p=p->next;

        while(p)
        {
                if(p->num == num)
                        pprev->next = p->next;

                pprev=p=p->next;
        }

        return head;
}

void print(struct student *head)
{
        struct student *p;

        p = head;
        while(p)
        {
                printf("student: %d, score: %f \r\n", p->num, p->score);
                p=p->next;
        }
}

struct student *create()
{
        struct student *head;
        struct student *p1, *p2;

        p1 = p2 = (struct student *)malloc(LEN);

        printf("Please input num:");
        scanf("%d", &p1->num);
        printf("Please input score:");
        scanf("%d", &p1->score);

        head = NULL;
        n=0;

        while(p1->num)
        {
                n++;
                if(1 == n)
                {
                        head = p1;
                }
                else
                {
                        p2->next = p1;
                }

                p2 = p1;
                p1 = (struct student *)malloc(LEN);

                printf("Please input num:");
                scanf("%d", &p1->num);
                printf("Please input score:");
                scanf("%d", &p1->score);
        }

        p2->next = NULL;
        return head;
}
小弟我正在看小甲鱼老师的C语言视频第56课,写得如上程序,使用VS2010能正常编译运行(后面的部分自己写的,所以跟老师的不一样)。




可是假若把delnum的声明语句位置换一下,即把main函数改成:
int main()



{


        struct student *stu;



        stu = create();

        print(stu);


        int delnum;


        printf("Please input delete num:");


        scanf("%d", &delnum);



        del(stu, delnum);

        print(stu);


        system("pause");



}

就会出现如下错误:
Error 1 error C2143: syntax error : missing ';' before 'type' e:\c\list1\list1\list1.c 25 1 list1
在网上找不到相关的说明,有知道的请不吝赐教,谢谢!



风之残月 发表于 2014-12-2 21:11:24

如果你使用的是VC6等一些不支持C99标准的编译器的话,变量定义要放在函数体中的最前面,把“int delnum;”放在main()函数中最前面

ylass 发表于 2014-12-2 23:01:51

在我的VS2010上编译没有问题,理论上应该也是不会有问题的,,顺便提醒一下,create函数里面成绩的读取应该用%f

Mr.屎壳螂 发表于 2014-12-2 23:19:17

我用VS2012
试了下
#include<stdio.h>

int main()
{
        int a=1;
        int b=2;
        a=a+b;
        int c;
        c=a;
        printf("%d",c);
        return 0;
}
这个编译起来是有错的,
错误也是这样的
错误        2        error C2065: “c”: 未声明的标识符       
错误        3        error C2065: “c”: 未声明的标识符       
错误        1        error C2143: 语法错误 : 缺少“;”(在“类型”的前面)

而这个
#include<stdio.h>

int main()
{
        int a=1;
        int b=2;
        int c;
        a=a+b;
        c=a;
        printf("%d",c);
        return 0;
}
这个是对的,
你的程序同样的.把int delnum;
放到了main函数的开头,就好了

c语言标准中,最新的c99支持你的那种写法,定义变量在使用之前定义就行,
但是在编译器没有支持c99的情况下,是老版本的标准,你的那种写在后面的写法就会报错
页: [1]
查看完整版本: 奇怪的问题