2 qq 29754969 qq_29754969 于 2016.02.12 12:43 提问

大神们!这个程序在没有错误,能运行,为什么一到蓝桥杯提交时间就会显示编译错误的?
c


评测结果 编译出错
得分 0
CPU使用 编译出错
内存使用 编译出错
试题名称 算法训练 P1103
语言 C
源代码

#include
#include
#include
struct fushu{
double real;
double i;
};
fushu* add(fushu a, fushu b){
fushu* ret = (fushu*)malloc(sizeof(fushu));
ret->real = a.real + b.real;
ret->i = a.i + b.i;
return ret;
}
fushu* minus(fushu a, fushu b){
fushu* ret = (fushu*)malloc(sizeof(fushu));
ret->real = a.real - b.real;
ret->i = a.i - b.i;
return ret;
}
fushu* multiply(fushu a, fushu b){
fushu* ret = (fushu*)malloc(sizeof(fushu));
ret->real = a.real*b.real - a.i*b.i;
ret->i = a.real*b.i + a.i*b.real;
return ret;
}
fushu* divide(fushu a, fushu b){
fushu* ret = (fushu*)malloc(sizeof(fushu));
ret->real = (a.real*b.real + a.i*b.i)/(b.real*b.real + b.i*b.i);
ret->i = (a.i*b.real - a.real*b.i)/(b.real*b.real + b.i*b.i);
return ret;
}
int main()
{

char sign;
fushu m;
fushu n;
scanf("%c%lf%lf%lf%lf",&sign,&m.real,&m.i,&n.real,&n.i);
if( sign == '+' ){
add(m,n);
printf("%.2lf+%.2lfi\n",add(m,n)->real,add(m,n)->i);
}
if( sign == '-' ){
minus(m,n);
printf("%.2lf+%.2lfi\n",minus(m,n)->real,minus(m,n)->i);
}
if( sign == '*' ){
multiply(m,n);
printf("%.2lf+%.2lfi\n",multiply(m,n)->real,multiply(m,n)->i);
}
if( sign == '/' ){
divide(m,n);
printf("%.2lf+%.2lfi\n",divide(m,n)->real,divide(m,n)->i);
}
return 0;
}
编译信息

code.c:8:2: error: unknown type name 'fushu'
fushu* add(fushu a, fushu b){
^
code.c:8:13: error: unknown type name 'fushu'
fushu* add(fushu a, fushu b){
^
code.c:8:22: error: unknown type name 'fushu'
fushu* add(fushu a, fushu b){
^
code.c:14:2: error: unknown type name 'fushu'
fushu* minus(fushu a, fushu b){
^
code.c:14:15: error: unknown type name 'fushu'
fushu* minus(fushu a, fushu b){
^
code.c:14:24: error: unknown type name 'fushu'
fushu* minus(fushu a, fushu b){
^
code.c:20:2: error: unknown type name 'fushu'
fushu* multiply(fushu a, fushu b){
^
code.c:20:18: error: unknown type name 'fushu'
fushu* multiply(fushu a, fushu b){
^
code.c:20:27: error: unknown type name 'fushu'
fushu* multiply(fushu a, fushu b){
^
code.c:26:2: error: unknown type name 'fushu'
fushu* divide(fushu a, fushu b){
^
code.c:26:16: error: unknown type name 'fushu'
fushu* divide(fushu a, fushu b){
^
code.c:26:25: error: unknown type name 'fushu'
fushu* divide(fushu a, fushu b){
^
code.c: In function 'main':
code.c:35:2: error: unknown type name 'fushu'
fushu m;
^
code.c:36:2: error: unknown type name 'fushu'
fushu n;
^
code.c:37:33: error: request for member 'real' in something not a structure or union
scanf("%c%lf%lf%
详细记录

评测点序号 评测结果 得分 CPU使用 内存使用 下载评测数据
1 编译出错 0.00 0ms 0B 输入 输出
2 编译出错 0.00 0ms 0B VIP特权
3 编译出错 0.00 0ms 0B VIP特权
4 编译出错 0.00 0ms 0B VIP特权

2个回答

qq_27183003
qq_27183003   Ds   Rxr 2016.02.12 14:17

1、如果是c语言,必须用struct fusht_t 来定义结构体变量,如果是c++,可以省略struct;
或者这样定义:

 typedef struct {
    double real;
    double i;
}fushu;

2、你的程序有一些不合理的地方,每一次调用函数都会动态申请了一个结构体变量,但都没有释放。
修改如下,供参考:

 #include <stdio.h>
#include <stdlib.h>
typedef struct {
    double real;
    double i;
}fushu;

fushu* add(fushu a, fushu b){
    fushu* ret = (fushu*)malloc(sizeof(fushu));
    ret->real = a.real + b.real;
    ret->i = a.i + b.i;
    return ret;
}
fushu* minus(fushu a, fushu b){
    fushu* ret = (fushu*)malloc(sizeof(fushu));
    ret->real = a.real - b.real;
    ret->i = a.i - b.i;
    return ret;
}
fushu* multiply(fushu a, fushu b){
    fushu* ret = (fushu*)malloc(sizeof(fushu));
    ret->real = a.real*b.real - a.i*b.i;
    ret->i = a.real*b.i + a.i*b.real;
    return ret;
}
fushu* divide(fushu a, fushu b){
    fushu* ret = (fushu*)malloc(sizeof(fushu));
    ret->real = (a.real*b.real + a.i*b.i)/(b.real*b.real + b.i*b.i);
    ret->i = (a.i*b.real - a.real*b.i)/(b.real*b.real + b.i*b.i);
    return ret;
}
int main()
{

    char sign;
    fushu m;
    fushu n;
    fushu *p=NULL;
    scanf("%c%lf%lf%lf%lf",&sign,&m.real,&m.i,&n.real,&n.i);
    if( sign == '+' ){
        p=add(m,n);
        printf("%.2lf+%.2lfi\n",p->real,p->i);
    }
    if( sign == '-' ){
        p=minus(m,n);
        printf("%.2lf+%.2lfi\n",p->real,p->i);
    }
    if( sign == '*' ){
        p=multiply(m,n);
        printf("%.2lf+%.2lfi\n",p->real,p->i);
    }
    if( sign == '/' ){
        p=divide(m,n);
        printf("%.2lf+%.2lfi\n",p->real,p->i);
    }
    if(p) delete p;

    return 0;
}
caozhy
caozhy 赞,很详细的答案,建议lz采纳
2 年多之前 回复
qq_29754969
qq_29754969 谢谢啊!已经解决了!
2 年多之前 回复
91program
91program   Ds   Rxr 2016.02.12 13:35

你最好是使用 struct fushu 来定义变量,或者返回的类型。
否则,你最好使用如下的定义:

 typedef struct fushu
 {
 ...
 }fusht_t;

然后使用 fushu_t 来定义变量等。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
提交到PTA的套路
在PTA提交Java程序需要注意如下几个要点。 1. Main类与Scanner 1.1 Main类 你提交的所有程序都应该有一个Main类,并且必须是声明为public 1.2 输入与输出 Java中使用Scanner处理输入。你需要注意如下几个地方 程序开头必须import java.util.Scanner导入Scanner类。 使用Scanne
OJ提交错误原因
Waiting:正在评测程序。  Compiling:正在编译程序。  Accepted:程序正确。  Wrong Answer:程序运行结果与正确结果不一样。  Time Limit Exceeded:运行时间超出了要求。  Memory Limit Exceeded:程序运行占用内存超出了标准。  Runtime Error:程序在运行的时候异常退出。  Compile Erro
OJ 上常见错误提示
OJ 上常见错误提示 1. 下面是常见的 OJ 评判结果以及它们表示的意思: Queuing : 提交太多了,OJ 无法在第一时间给所有提交以评判结果,后面提交的程序将暂时处于排队状态等待 OJ 的评判。不过这个过程一般不会很长。 Compiling : 您提交的代码正在被编译。 Running : 您的程序正在 OJ 上运行。 Judging : OJ 正在检查您程
Intellij IDEA 编译报错,忽略错误,运行
相信大家在使用Intellij IDEA的时候,这样一种比较尴尬的情况。自己在做单元测试的时候,项目当中,有部分无关紧要的代码有问题,但是当运行测试程序的时候,IDE会进行编译,然后发现错误,不会执行下去!!!!这样就比较尴尬了,通过配置可以实现忽略不执行的错误,运行程序。1,setting当中的设置 2,Run/Debug Configurations当中设置 这样就可以运行项目了。
PAT要注意的地方
PAT即是浙大OJ(OnlineJudge),网址是http://www.patest.cn/contests/pat-a-practise(因为分为普通级别,Advanced级别和top级别),链接中是Advanced级别的题目集,也是大家平常刷题用的最多的题集。 截图如下,其中,如果你A过(通过)的题目会标成红色的Y 右边是通过、提交和通过率。 楼主其实很早就开始刷PAT,用的以
不知道什么原因在c++上运行正常,在codevs 上就是提交通不过
#include using namespace std; int main() { int n,b,i,max,min; cin>>n; for(i=1;i { cin>>b; if(b    min=b; if(b>max)    max=b; } cout }
关于蓝桥杯的考生须知和要求
2017蓝桥杯模拟,考生要求
为什么有时候编译老是出现加入的系统头文件出现错误啊
为什么有时候编译老是出现加入的系统头文件出现错误啊 例如出现这样的问题: C:\Program Files\Microsoft SDKs\Windows\v6.0A\\include\ws2def.h(91) : warning C4005: “AF_IPX”: 宏重定义 C:\Program Files\Microsoft SDKs\Windows\v6.0A\\include\win
关于PAT提交程序的注意事项
今天在提交一题的时候遇到了一个问题。 我在本地编译运行都是正确的,结果提交时一直失败,如图 查了半天 发现PAT是linux编译系统    itoa在windows下才有.  linux下可以通过sprintf来做转换。 sprintf() 函数功能:把格式化的数据写入某个字符串 函数原型:int sprintf( char *buffer, const char *
编译错误和运行错误;
编译错误指的是你写代码不规范,语法错误(简单说就是你代码这么写没有问题,但是你知道会在运行时候报错)和一些很明显的错误。运行错误是指代码逻辑错误,报异常。 DataStream有什么用 存取对象的属性; String.getBytes();获取String的byte;