求助,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 09:04 编辑
稍微看了一下你的程序,你的Arrays.c里边的for(int i=0;......)这是C99语法,你的编译器不支持。解决办法:先int i;然后再用for语句。
int i;
for(i=0;i<len;i++,arrP++)
楼主不要贴图 贴代码八看图号伤眼睛呀
是啊,贴代码!:sad oggplay 发表于 2014-8-23 08:51
稍微看了一下你的程序,你的Arrays.c里边的for(int i=0;......)这是C99语法,你的编译器不支持。解决办法: ...
嗯我用的是gcc编译器,应该没什么问题吧。 流行语 发表于 2014-8-23 14:03
是啊,贴代码!
贴出来是纯文本的 很难看啊 求教能贴出想csdn那种格式的么? 谢谢各位,问题解决了,刚重新编辑的代码就是改好的,主要是在main中的修改:
之前在初始化结构体的时候是
struct Shape* shape;
改成:
struct Shape sh;
struct Shape* shape = &sh;
具体原因还不知到,之前错误的做法在单独编译的时候没问题。虽然问题解决了,有知道原因的还请告知下,
谢谢各位了 kklloo 发表于 2014-8-23 09:49
楼主不要贴图 贴代码八看图号伤眼睛呀
已修改 :lol: 流行语 发表于 2014-8-23 14:03
是啊,贴代码!
已修改,谢谢回复!~ oggplay 发表于 2014-8-23 08:51
稍微看了一下你的程序,你的Arrays.c里边的for(int i=0;......)这是C99语法,你的编译器不支持。解决办法: ...
单独编译都没问题,放在一起就有问题了,感谢回复~! oggplay 发表于 2014-8-23 08:51
稍微看了一下你的程序,你的Arrays.c里边的for(int i=0;......)这是C99语法,你的编译器不支持。解决办法: ...
楼上正解 看看那 本帖最后由 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 不懂,初学:sad 看来我还有待学习{:7_132:} 看了一下代码,就当学习 有待学习啊! 也打算学C语言,不制动好不好学 {:1_1:} :call:
页:
[1]