c/c++结构体,循环输入有问题,求指导

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c/c++结构体,循环输入有问题,求指导相关的知识,希望对你有一定的参考价值。

#include<stdlib.h>
#include<stdio.h>
struct person

char name[15];
int num;
float score;
;
main()

struct person stud[4];
int i;
for(i=0;i<4;i++)

printf("input the name of student[%d]\n",i);
gets(stud[i].name);
printf("input the num of students[%d]\n",i);
scanf("%d",&stud[i].num);
printf("input the score of students[%d]\n",i);
scanf("%f",&stud[i].score);

printf("\n record name\t\t num score\n");
for(i=0;i<4;i++)
printf("%3d %-15s%4d%3.1f\n",i,stud[i].name,stud[i].num,stud[i].score);


为什么第二次循环时,有问题???

参考技术A 键盘缓冲区的问题
scanf后,键盘缓冲区还有回车符在
所以第二次循环的时候把回车赋给结构体2的成员name
在scanf后加fflush(stdin);清空缓冲区追问

如果我用getchar()行不?

追答

getchar()一次只能获取一个字符啊,而且回车符也会被获取的

追问

作为本例来说,最后也就是一个回车是吧,getchar()好像也可以的哦,多亏你的提醒,主要是我加getchar()的时候加错了位置

追答

哦,误解了,我以为你说用getchar给name赋值,
没错,用getchar可以去掉回车的

本回答被提问者采纳
参考技术B printf("%3d %-15s%4d%3.1f\n",i,stud[i].name,stud[i].num,stud[i].score);
你的第一个参数name是char数组,用%s打印,第二个num才是int用%d,写反了追问

不是的,第一个是i,第二个才是name,
而我出的问题是在scanf的时候就有问题,第二次循环时name不让输入,直接跳到num

追答

没仔细看,sorry,楼下正解。

C语言结构体排序

任务描述
题目描述:有n个学生的信息(包括学号,姓名,成绩),要求按照成绩的高低顺序输出学生的信息。
输入
输入数据第一行为整数n,表示有n个学生。 1<=n<=200;
接下来包含n行数据,每行数据代表一个学生的信息,按学号,姓名,成绩顺序给出。
学号为一整数,最多11位,姓名为字符串,长度不超过20,成绩为整数。
输出
按成绩由高到低输出n个学生的信息,字段顺序和输入相同。
样例输入
5
10101 Zhang 78
10103 Wang 98
10106 Li 86
10108 Ling 73
10110 Sun 100
样例输出
10110 Sun 100
10103 Wang 98
10106 Li 86
10101 Zhang 78
10108 Ling 73

#include<stdio.h>

struct

long long id;
char name[32];
int s;
t,stus[200];

int main()

int n,i,swap=1,sorted=0;

scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%lld %s %d",&stus[i].id,stus[i].name,&stus[i].s);
printf("\n");
while(swap)

swap=0;
for(i=0;i<n-1-sorted;i++)

if(stus[i+1].s>stus[i].s)

swap=1;
t=stus[i];
stus[i]=stus[i+1];
stus[i+1]=t;


sorted++;

for(i=0;i<n;i++)
printf("%lld %s %d\n",stus[i].id,stus[i].name,stus[i].s);
return 0;
追答

追问

请问怎么删除结构体数组中的一个元素

请问怎么删除结构体数组中的一个元素

追答

首先,找到要删除的元素的下标,假设下标为n,

然后,令下标为n+1的元素到数组的最后一个元素依次向前移动一个元素,即覆盖前一个元素

最后,令数组长度减1

很简单的算法。

参考技术A 就是排序问题嘛,跟结构体有啥关系?
比较结构体中的shu成员啊
冒泡排序的核心代码如下:
struct student ss[20],t;
for(i=0;i<20-1;i++)

for(j=20-1;j>i;j--)

if(ss[j].shu < ss[j-1].shu)

t=ss[j];
ss[j]=ss[j-1];
ss[j-1]=t;



补充:
只需要在交换的时候,按整个结构体换,就行了啊
下面交换代码中的t和ss都是结构体啊
struct student ss[20],t;
t=ss[j];
ss[j]=ss[j-1];
ss[j-1]=t;追问

请问怎么删除结构体数组中的一个元素

以上是关于c/c++结构体,循环输入有问题,求指导的主要内容,如果未能解决你的问题,请参考以下文章

怎么用 C/C++ 把结构体数组转成 JSON串

C语言结构体,求大佬指点

C语言实验题 求大神指点

c语言//为啥这个结构体类型不匹配?

c语言中定义结构体都有哪些方法?

C语言关于结构体变量为动态数组赋值问题