计蒜客 C语言 泥塑课中结构体的使用时,typedef使用与否的区别

问题描述

计蒜客 C语言 泥塑课中结构体的使用时,typedef使用与否的区别

代码一:
#include

typedef struct student{
int l;
int w;
int h;
int v;
char name[9];
}stu[10];

void func(int n){
int i, ave = 0, robber, victim;
for(i = 0; i < n; i ++){
scanf("%d %d %d %s", &stu[i].l, &stu[i].w, &stu[i].h, &stu[i].name);
stu[i].v = stu[i].l * stu[i].w * stu[i].h;
ave += stu[i].v;
}
ave = ave / n;
for(i = 0; i < n; i ++){
if(ave < stu[i].v){
robber = i;
}
else if(ave > stu[i].v){
victim = i;
}

}
printf("%s took clay from %s.n", stu[robber].name, stu[victim].name);
scanf("%d",&n);
if(n != -1){
func(n);
}
else{
return;
}
}

int main(){
int n;
scanf("%d", &n);
if(n != -1){
func(n);
}
else
return;
}

代码二:
#include

struct student{
int l;
int w;
int h;
int v;
char name[9];
}stu[10];

void func(int n){
int i, ave = 0, robber, victim;
for(i = 0; i < n; i ++){
scanf("%d %d %d %s", &stu[i].l, &stu[i].w, &stu[i].h, &stu[i].name);
stu[i].v = stu[i].l * stu[i].w * stu[i].h;
ave += stu[i].v;
}
ave = ave / n;
for(i = 0; i < n; i ++){
if(ave < stu[i].v){
robber = i;
}
else if(ave > stu[i].v){
victim = i;
}

}
printf("%s took clay from %s.n", stu[robber].name, stu[victim].name);
scanf("%d",&n);
if(n != -1){
func(n);
}
else{
return;
}
}

int main(){
int n;
scanf("%d", &n);
if(n != -1){
func(n);
}
else
return;
}

代码一比代码二仅仅是在struct前多写了一个typedef,为什么二就可以正常运行,一就不可以呢?

解决方案

这是C语言和C++语言的差异
http://www.2cto.com/kf/201402/280256.html

解决方案二:

typedef单从字面上来看,type define,类型定义,是用来定义数据类型的,不能用来定义变量
typedef struct student{...}stu[10];这样写的意思不是表示定义了一个数组(含10个struct student类的对象)
代表的意思是:你定义了一种数据类型,名字叫stu,含10个struct student类的元素的数据类型
如下使用:(为了区分stu变量,我把typedef的名字改成了sstu)

 #include <stdio.h>

typedef struct student{
    int l;
    int w;
    int h;
    int v;
    char name[9];
}sstu[10];

sstu stu;
void func(int n){

    int i, ave = 0, robber, victim;
    for(i = 0; i < n; i ++){
        scanf("%d %d %d %s", &stu[i].l, &stu[i].w, &stu[i].h, &stu[i].name);
        stu[i].v = stu[i].l * stu[i].w * stu[i].h;
        ave += stu[i].v;
    }
    ave = ave / n;
    for(i = 0; i < n; i ++){
        if(ave < stu[i].v){
            robber = i;
        }
        else if(ave > stu[i].v){
            victim = i;
        }
    }
    printf("%s took clay from %s.n", stu[robber].name, stu[victim].name);
    scanf("%d",&n);
    if(n != -1){
        func(n);
    }
    else{
        return;
    }
}

int main(){
    int n;
    scanf("%d", &n);
    if(n != -1){
        func(n);
    }
    else
        return 0;
}
时间: 2024-11-02 06:05:39

计蒜客 C语言 泥塑课中结构体的使用时,typedef使用与否的区别的相关文章

字符串-计蒜客中的一道难题,向各位大大求教

问题描述 计蒜客中的一道难题,向各位大大求教 给定由大写,小写字母和空格组成的字符串,返回最后一个单词的长度. 如果不存在最后一个单词,返回0 注意: "单词"是指不包含空格符号的字符串 例如: s = "hello World", 那么返回的结果是5 格式: 第一行输入字符串s,然后输出s中最后一个单词的长度. 这是我的源程序,在机子上测试了好多遍都是对的,可是一提交就错 #include #include int main() { int i,j; char A

数组 语言-简单的 素数筛选 刚刚入门计蒜客上的一个题目总过不了

问题描述 简单的 素数筛选 刚刚入门计蒜客上的一个题目总过不了 小度机器人最近正在添加功能,Robin希望小度机器人可以告诉他从1到N( 1 < N <= 10000)有多少个素数.请你来帮帮他吧? 输入包括一行,仅一个数字N. 输出在(1, N]区间内的所有的素数. 解决方案 http://www.cnblogs.com/wuzhenbo/archive/2012/04/26/2470357.html 解决方案二: 素数计算再简单不过了,当然你还是最好检查下你的程序.然后看看是不是性能的原因

计蒜客90后创始人俞昊然:规矩有道,先优后达

计蒜客创始人.http://www.aliyun.com/zixun/aggregation/32086.html">首席执行官:俞昊然 在线计算慕课平台计蒜客于近期获得来自紫辉创投的数千万人民币的pre-A轮投资.茄葩前不久参观了计蒜客的"大本营",并对计蒜客的创始人俞昊然做了采访. 茄葩:计蒜客的融资获得了很多人的关注,你打算怎么花这笔钱? 俞昊然:人才是很重要的一方面吧,另一方面是和高校的合作,还有内容.对于市场的投入目前来说应该会小一些.对在线教育来说,内容是很

编程-在计蒜客、萌码和Codecademy这些网站学习的时候,这些网站怎样判断出你写的代码对错的?

问题描述 在计蒜客.萌码和Codecademy这些网站学习的时候,这些网站怎样判断出你写的代码对错的? 在计蒜客.萌码和Codecademy这些网站学习的时候,这些网站怎样判断出你写的代码对错的? 包括编译的错误,以及和他们教程所需的要求不一样的错误 解决方案 学习代码的外国网站 解决方案二: 估计是服务器中运行编译器编译你的源码吧

C语言中结构体(struct)的几种初始化方法_C 语言

本文给大家总结的struct数据有3种初始化方法      1.顺序      2.C风格的乱序      3.C++风格的乱序 下面通过示例代码详细介绍这三种初始化方法. 1)顺序 这种方法很常见,在一般的介绍C的书中都有介绍.顺序初始化的特点是: 按照成员定义的顺序,从前到后逐个初始化:允许只初始化部分成员:在被初始化的成员之前,不能有未初始化的成员. 示例: struct User oneUser = {10, "Lucy", "/home/Lucy"}; 2

c++-Visula Basic 6.0语言调用C++ struct结构体中的字符串问题

问题描述 Visula Basic 6.0语言调用C++ struct结构体中的字符串问题 VB6调用C++ DLL结构体struct中的字符串,内存预分配的写法是什么,内存回收怎么做?VB不能用指针的谢谢 解决方案 VB不支持指针,一般你可以定义成局部变量,这样函数退出会自动回收的. 解决方案二: c++公用体union.结构体struct内存分配问题

struct-C语言中结构体中的数组,不能直接赋值吗

问题描述 C语言中结构体中的数组,不能直接赋值吗 设有定义:struct{char mark[12];intnum1;double num2;}t1,t2;若变量均已正确赋初值,则以下语句中错误的是(C) (A) t1=t2; (B) t2.num1=t1.num1; (C) t2.mark=t1.mark;//mark为结构体中的数组,不能直接赋值?? (D) t2.num2=t1.num2; ?====如题参考答案说为结构体中的数组,不能直接赋值,为什么呢?那应该怎么赋值呢?求大侠指教 解决

C与C++中结构体的区别_C 语言

C中的结构体和C++中结构体的不同之处:在C中的结构体只能自定义数据类型,结构体中不允许有函数,而C++中的结构体可以加入成员函数. C++中的结构体和类的异同: 一.相同之处:结构体中可以包含函数:也可以定义public.private.protected数据成员:定义了结构体之后,可以用结构体名来创建对象.但C中的结构体不允许有函数:也就是说在C++当中,结构体中可以有成员变量,可以有成员函数,可以从别的类继承,也可以被别的类继承,可以有虚函数. 二.不同之处:结构体定义中默认情况下的成员是

Android For JNI(五)——C语言多级指针,结构体,联合体,枚举,自定义类型

Android For JNI(五)--C语言多级指针,结构体,联合体,枚举,自定义类型 我们的C已经渐渐的步入正轨了,基础过去之后,就是我们的NDK和JNI实战了 一.多级指针 指针的概念我们在前面也讲了许多,也提到了多级指针的概念,那具体我们怎么去操作呢 #include <stdio.h> #include <stdlib.h> main(){ int i = 3; //一级 int* p = &i; //二级,保存一级指针 int** w = &p; //三