关于c语言通过scanf向结构体输入数据

关于c语言通过scanf向结构体输入数据,第1张

因为你在程序中要求的只是输入日期共计8个数字,中间没有分隔符,所以你在输入时如果掺有其它符号,比如输入了年和日中间有空格或者横线,就会导致不正确。

比较好的办法是在输出时提示输入数据的格式,并且使用常见的格式,比如改为以下代码:

void main(){
  struct date a,b;
  cout<<"请输入截止日期,使用格式yyyy-mm-dd"<<endl;
  scanf("%4d-%2d-%2d",&ayear,&amonth,&aday);
  fflush(stdin);
  cout<<"请输入开始日期,使用格式yyyy-mm-dd"<<endl;
  scanf("%4d-%2d-%2d",&byear,&bmonth,&bday);
}

#include<iostream>

#include<stringh>

using namespace std;

class Book

{

public:

Book(string name,string auther,string Press,int num)

name(name),auther(auther),Press(Press),num(num){}

~Book(){}

//void setbook(){};

void print()

{

cout<<name<<endl<<auther<<endl<<Press<<endl<<num<<endl;

}

private:

string name;

string auther;

string Press;

扩展资料:

结构体的大小不是结构体元素单纯相加就行的,因为我们主流的计算机使用的都是32bit字长的CPU,对这类型的CPU取4个字节的数要比取一个字节要高效,也更方便。所以在结构体中每个成员的首地址都是4的整数倍的话。

取数据元素时就会相对更高效,这就是内存对齐的由来。每个特定平台上的编译器都有自己的默认“对齐系数”(也叫对齐模数)。程序员可以通过预编译命令#pragma pack(n),n=1,2,4,8,16来改变这一系数,其中的n就是你要指定的“对齐系数”。

1、数据成员对齐规则:结构(struct)(或联合(union))的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员的对齐按照#pragma pack指定的数值和这个数据成员自身长度中,比较小的那个进行。

2、结构(或联合)的整体对齐规则:在数据成员完成各自对齐之后,结构(或联合)本身也要进行对齐,对齐将按照#pragma pack指定的数值和结构(或联合)最大数据成员长度中,比较小的那个进行。

3、结合1、2可推断:当#pragma pack的n值等于或超过所有数据成员长度的时候,这个n值的大小将不产生任何效果。

参考资料来源:百度百科-结构体

for (i=0;i<10;i++)
scanf("%d %c %f",&sch[i]num,&sch[i]name,&sch[i]score ); 就可以了。
float score,float 型输入格式 是 %f 不是 %lf。
&sch[1]name 里的 1 改用 i
注意,你的 name 只允许 1个字符。若多个字符 就会出错。
如果 改为:
struct student {
int num;
char name[20]; // 用字符串,而不是单个字符
float score;
} sch[10];
输入格式 name 用 %s, 参数 sch[i]name,没有 &号:
for (i=0;i<10;i++)
scanf("%d %s %f",&sch[i]num, sch[i]name,&sch[i]score );

#include <stdioh>
struct date {
int year;
int month;
int day;
};
struct student{
int id;
char name[10];
char sex[10];
struct date birthday;
};
int main() {
int i;
struct student stu[5];
for(i=0; i<5; i++){
printf("输入第%d个学生学号,姓名,性别,生日\n", i + 1);
scanf("%d %s %s %d %d %d", &stu[i]id, stu[i]name, stu[i]sex, 
&stu[i]birthdayyear, &stu[i]birthdaymonth, &stu[i]birthdayday);
}

printf("输出第3个学生的信息:\n");
printf("%d, %s, %s, %d, %d, %d",  stu[3]id, stu[3]name, stu[3]sex, 
stu[3]birthdayyear, stu[3]birthdaymonth, stu[3]birthdayday);
return 0;
}

这个是个简单的实现,不知道对你有没有帮助。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/13157629.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-06-13
下一篇 2023-06-13

发表评论

登录后才能评论

评论列表(0条)

保存