一个简单的C语言问题(结构体方面的)

LeeCookies 2017-06-04 04:28:40
{之前发过一次,排版错了,重新发}
最近在复习学过的C语言,在练习结构体的时候遇到了一个小问题:
先上代码:
#include<stdio.h>
int main(void)
{
struct Plan
{
int Number;
char Name[20];
char StudentID[20];
float Grades;
};
struct Plan Plan1, Plan2;

Plan1 = { 1,"LeeCookies","2015220902026",100 };

Plan2 = Plan1;

printf("%d\n", Plan2.Number);
printf("%s\n", Plan2.Name);
printf("%s\n", Plan2.StudentID);
printf("%.0f\n", Plan2.Grades);

return 0;
}
在把结构体放在main函数当中的时候,按照上面的写法,在初始化Plan1的时候就不会提示错误;
但是,把结构体放在头文件当中,再按照相同的方式对Plan1进行声明和初始化,就会提示应输入表达式;
代码如下:
#include<stdio.h>
#include"C-2.h"
int main(void)
{
struct Plan Plan1, Plan2;

Plan1 = { 1,"LeeCookies",100,"2015220902026" };

Plan2 = Plan1;
printf("%d\n", Plan2.Number);
return 0;

}
上面的代码,在Plan1后会提示:应输入表达式;
其中:
“C-2.h”的内容:
#include<stdio.h>
struct Plan
{
int Number;
char Name[20];
float Grade;
char StudentID[20];
};
对代码做如下改动:
如下代码:
#include<stdio.h>
#include"C-2.h"
int main(void)
{
struct Plan Plan2;

struct Plan Plan1 = { 1,"LeeCookies",100,"2015220902026" };

Plan2 = Plan1;
printf("%d\n", Plan2.Number);
return 0;
}
在这种情况下,如果立即声明并且在声明的同时进行初始化,就不会提示错误;
请问有谁知道怎么回事吗?
...全文
549 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2017-11-21
  • 打赏
  • 举报
回复
“变量赋值”和“变量初始化”不是一回事! “变量赋值”发生在运行期,其写法遵循赋值语法规定。 “变量初始化”发生在编译期或运行期,其写法遵循初始化列表语法规定。
LeeCookies 2017-11-20
  • 打赏
  • 举报
回复
引用 8 楼 js_gary 的回复:
你对结构体初始化不太了解,Plan1 = { 1,"LeeCookies","2015220902026",100 };这也不是对结构体中的每一个成员赋值,更不是初始化,初始化的写法: struct Plan Plan1 = { 1,"LeeCookies","2015220902026",100 }; 即在定义时用{}方式对其成员做初始化。如果你非要先定义一个结构变量,再初化,那你只以逐个对成员赋值,Plan1.number=1;...
谢谢您
  • 打赏
  • 举报
回复
你对结构体初始化不太了解,Plan1 = { 1,"LeeCookies","2015220902026",100 };这也不是对结构体中的每一个成员赋值,更不是初始化,初始化的写法: struct Plan Plan1 = { 1,"LeeCookies","2015220902026",100 }; 即在定义时用{}方式对其成员做初始化。如果你非要先定义一个结构变量,再初化,那你只以逐个对成员赋值,Plan1.number=1;...
yi19861209 2017-06-13
  • 打赏
  • 举报
回复
建筑师 2017-06-07
  • 打赏
  • 举报
回复
stdio.h包含2遍? 可能与struct语句后面有无分号有关
waitingzby 2017-06-06
  • 打赏
  • 举报
回复
试试定义时进行初始化
自信男孩 2017-06-05
  • 打赏
  • 举报
回复
结构体变量可以在定义时初始化,若在定义时不初始化不等于结构体变量没有值,而是系统给其为随机值。 另外,结构体赋值,要么一个元素一个元素赋值,要么结构体变量给结构体变量赋值。或者下面的一种赋值方法:
#include<stdio.h>
int main(void)
{
    struct Plan
    {
        int Number;
        char Name[20];
        char StudentID[20];
        float Grades;
    };
    struct Plan Plan1, Plan2;

    Plan1 = (struct Plan){ 1,"LeeCookies","2015220902026",100 };

    Plan2 = Plan1;

    printf("%d\n", Plan2.Number);
    printf("%s\n", Plan2.Name);
    printf("%s\n", Plan2.StudentID);
    printf("%.0f\n", Plan2.Grades);

    return 0;
}
Plan1 = (struct Plan){ 1,"LeeCookies","2015220902026",100 };
cain-won 2017-06-05
  • 打赏
  • 举报
回复
可能和预编译有关。你把结构体的声明写在.h文件里,然后在在.cpp文件里用结构体。此时编译器会先把.h文件进行预编译。
zhujinqiang 2017-06-05
  • 打赏
  • 举报
回复
使用结构体变量时,在定义时初始化是个好的编程习惯。
wang0635 2017-06-04
  • 打赏
  • 举报
回复
说实在的,第一种情况也不应该允许。那不是初始化,是赋值。 注意初始化与赋值的区别。

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧