忘我- 发表于 2014-8-23 08:00:23

求助,C语言问题,卡这里了,急!!!

本帖最后由 忘我- 于 2014-8-23 18:46 编辑

刚学c不久,正在练习,
期间写了个小例子1,主要是运算矩形,圆,正方形的面积。
然后在main里面写了相关的调用,在图代码2,
之后又写了一个打印数组的小例子,在图代码1.

问题是,两个单独运行都不报错,单独就是注释掉其中一个。
一旦一起打开,就会因为代码1中的int len就是算数组长度报错,导致编译不过,

好郁闷,求教各位大神帮忙指点谢谢!!!!

main文件#include <stdio.h>
#include "MathShape.h"
#include "Arrays.h"
#include "Sort.h"

int main(void)
{
   
    //代码一
    int arr[] = {1, 4, 7 -1, 12, 8, 32, -2, 8, 9, 66, 55, 44, 77, 45, 32};
    int len = sizeof(arr)/sizeof(int);
        printIntArray(arr, len);
        printf("-----starting quickSorting-----\n");
        quickSortMine(arr, len, 0, len - 1);
        printf("-----ending quickSorting-----\n");
        printIntArray(arr, len);

    //代码二
        struct Shape sh;
    struct Shape* shape = &sh;
        shape -> type = Rectangle;
        printf("pls insert a value for 'rectangle-width'\n");
        scanf("%d",&shape -> shapeData.rectangle.width);
        printf("pls insert a value for 'rectangle-height'\n");
        scanf("%d",&shape -> shapeData.rectangle.height);
        double result = calculate(shape);
        printf("-----now the result of calculating Rectangle is %lf-----\n", result);       
       
        // shape - circle
        shape -> type = Circle;
        printf("pls insert a value for 'circle-radius'\n");
        scanf("%d", &shape -> shapeData.circle.radius);

        // shape - circle : result
        printf("-----now the result of calculating Circle is %lf-----\n", calculate(shape));
                       
        // shape - square
        shape -> type = Square;
        printf("pls insert a value for 'square-sides'\n");
        scanf("%d", &shape -> shapeData.square.sides);

        // shape - sqaure : result
        printf("-----now the result of calculating Square is %lf-----\n", calculate(shape));
   
    //other
//
        return 0;
}

Array.h
#ifndef ARRAYS_H
#define ARRAYS_H

void printIntArray(int arr[], int len);

int isValid(int arr[], int len);

#endif



Arrays.c
#include <stdio.h>
#include "Arrays.h"

int isValid(int arr[], int len)
{   
        return arr != NULL && len > 0;
}
       
void printIntArray(int arr[], int len)
{
        if(!isValid(arr, len))
       {
               printf("Invalid Array Parameter!!!!");
               return;
       }
       
       
        int *arrP = arr;       
        for(int i = 0; i < len; i++, arrP++)
        {
                if(i == 0) printf("[ ");
                printf("%d", *arrP);       
                if(i < len - 1)        printf(", ");
                if(i == len -1) printf("]\n");
        }

}



MathShape.h
#ifndef MATH_SHAPE_H
#define MATH_SHAPE_H

#define PI 3.14
#define NULL_INT -1

enum ShapeType{ Rectangle, Circle, Square};

struct Shape{
        enum ShapeType type;
        union{
                struct Rectangle{int width; int height;} rectangle;
                struct Circle{int radius;} circle;
                struct Square{int sides;} square;
        } shapeData;
};

double calculate(struct Shape* shape);

double calculateCircle(int radius);

double calculateSquare(int sides);

double calculateRectangle(int width, int height);

#endif





MathShape.c

#include "MathShape.h"

double calculateRectangle(int width, int height)
{
        return width * height;
}

double calculateCircle(int radius)
{
        return PI * radius * radius;
}

double calculateSquare(int sides)
{
        return sides * sides;
}

double calculate(struct Shape* shape)
{
        const enum ShapeType type = shape -> type;

        if(type == Rectangle) return calculateRectangle(shape -> shapeData.rectangle.width, shape -> shapeData.rectangle.height);
        else if(type == Circle) return calculateCircle(shape -> shapeData.circle.radius);
        else if(type == Square) return calculateSquare(shape -> shapeData.square.sides);
        else return NULL_INT;
}





oggplay 发表于 2014-8-23 08:51:48

本帖最后由 oggplay 于 2014-8-23 09:04 编辑

稍微看了一下你的程序,你的Arrays.c里边的for(int i=0;......)这是C99语法,你的编译器不支持。解决办法:先int i;然后再用for语句。
int i;
for(i=0;i<len;i++,arrP++)

康小泡 发表于 2014-8-23 09:49:05

楼主不要贴图 贴代码八看图号伤眼睛呀

流行语 发表于 2014-8-23 14:03:31

是啊,贴代码!:sad

忘我- 发表于 2014-8-23 18:38:12

oggplay 发表于 2014-8-23 08:51
稍微看了一下你的程序,你的Arrays.c里边的for(int i=0;......)这是C99语法,你的编译器不支持。解决办法: ...

嗯我用的是gcc编译器,应该没什么问题吧。

忘我- 发表于 2014-8-23 18:41:32

流行语 发表于 2014-8-23 14:03
是啊,贴代码!

贴出来是纯文本的 很难看啊 求教能贴出想csdn那种格式的么?

忘我- 发表于 2014-8-23 18:48:49

谢谢各位,问题解决了,刚重新编辑的代码就是改好的,主要是在main中的修改:
之前在初始化结构体的时候是
    struct Shape* shape;


改成:
struct Shape sh;
    struct Shape* shape = &sh;


具体原因还不知到,之前错误的做法在单独编译的时候没问题。虽然问题解决了,有知道原因的还请告知下,
谢谢各位了

忘我- 发表于 2014-8-23 18:49:30

kklloo 发表于 2014-8-23 09:49
楼主不要贴图 贴代码八看图号伤眼睛呀

已修改 :lol:

忘我- 发表于 2014-8-23 18:50:08

流行语 发表于 2014-8-23 14:03
是啊,贴代码!

已修改,谢谢回复!~

忘我- 发表于 2014-8-23 18:50:58

oggplay 发表于 2014-8-23 08:51
稍微看了一下你的程序,你的Arrays.c里边的for(int i=0;......)这是C99语法,你的编译器不支持。解决办法: ...

单独编译都没问题,放在一起就有问题了,感谢回复~!

cqj9006 发表于 2014-8-24 17:04:43

oggplay 发表于 2014-8-23 08:51
稍微看了一下你的程序,你的Arrays.c里边的for(int i=0;......)这是C99语法,你的编译器不支持。解决办法: ...

楼上正解

w94ljj 发表于 2014-8-24 17:18:40

看看那

oggplay 发表于 2014-8-25 07:43:02

本帖最后由 oggplay 于 2014-8-25 07:44 编辑

忘我- 发表于 2014-8-23 18:50
单独编译都没问题,放在一起就有问题了,感谢回复~!
解决办法:
1、要用头文件要用到静态库。
2、不用静态库的话,去掉头文件,gcc -o shape MainShape.c Arrays.c MathShape.c
3、最简单的办法就是把所有函数定义放到MainShape.c里边然后编译。gcc -o shape MainShape.c

huagdan 发表于 2014-8-25 19:34:56

不懂,初学:sad

♂情︵☆缘★ 发表于 2014-8-26 20:37:13

看来我还有待学习{:7_132:}

shahaizi 发表于 2014-8-26 22:35:57

看了一下代码,就当学习

Lysanleo 发表于 2014-8-27 09:42:34

有待学习啊!

ghuibin 发表于 2014-8-27 21:42:13

也打算学C语言,不制动好不好学

阔怀 发表于 2015-8-6 10:21:41

{:1_1:}

桃花飞舞 发表于 2015-8-6 11:22:40

:call:
页: [1]
查看完整版本: 求助,C语言问题,卡这里了,急!!!