鱼C论坛

 找回密码
 立即注册
查看: 2411|回复: 19

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

[复制链接]
发表于 2014-8-23 08:00:23 | 显示全部楼层 |阅读模式
10鱼币
本帖最后由 忘我- 于 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;
}




想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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++)

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-8-23 09:49:05 | 显示全部楼层
楼主不要贴图 贴代码八  看图号伤眼睛呀
QQ截图20140823094838.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-8-23 14:03:31 | 显示全部楼层
是啊,贴代码!:sad
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

嗯我用的是gcc编译器,应该没什么问题吧。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-8-23 18:41:32 | 显示全部楼层

贴出来是纯文本的 很难看啊 求教能贴出想csdn那种格式的么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-8-23 18:48:49 | 显示全部楼层
谢谢各位,问题解决了,刚重新编辑的代码就是改好的,主要是在main中的修改:
之前在初始化结构体的时候是
    struct Shape* shape;

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

具体原因还不知到,之前错误的做法在单独编译的时候没问题。虽然问题解决了,有知道原因的还请告知下,
谢谢各位了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-8-23 18:49:30 | 显示全部楼层
kklloo 发表于 2014-8-23 09:49
楼主不要贴图 贴代码八  看图号伤眼睛呀

已修改 :lol:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-8-23 18:50:08 | 显示全部楼层

已修改,谢谢回复!~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

单独编译都没问题,放在一起就有问题了,感谢回复~!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

楼上正解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-8-24 17:18:40 | 显示全部楼层
看看那
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-8-25 19:34:56 | 显示全部楼层
不懂,初学:sad
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-8-26 20:37:13 | 显示全部楼层
看来我还有待学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-8-26 22:35:57 | 显示全部楼层
看了一下代码,就当学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-8-27 09:42:34 | 显示全部楼层
有待学习啊!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-8-27 21:42:13 | 显示全部楼层
也打算学C语言,不制动好不好学
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-8-6 10:21:41 | 显示全部楼层
{:1_1:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-8-6 11:22:40 | 显示全部楼层
:call:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-26 05:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表