gets用于结构体
时间: 2023-07-02 16:15:10 浏览: 78
gets()函数一般用于读取字符串,但是它已经被废弃了,不再是C语言标准库的一部分。如果要读取结构体中的字符串,建议使用fgets()函数。例如:
```c
struct person {
char name[20];
int age;
};
struct person p;
fgets(p.name, 20, stdin); // 从标准输入读取姓名字符串
scanf("%d", &p.age); // 从标准输入读取年龄整数
```
这样就可以读取一个包含姓名和年龄的person结构体了。
相关问题
如何对结构体数组使用gets函数
在 C 语言中,`gets()` 函数用于从标准输入(键盘)读取字符串,它的用法如下:
```c
char * gets(char * str);
```
这个函数会读取用户输入的字符串,并将其存储到 `str` 所指向的字符数组中,直到遇到换行符(`\n`)为止。需要注意的是,`gets()` 函数是不安全的,因为它没有对输入的字符串长度进行检查,容易导致缓冲区溢出的问题。
对于结构体数组,如果要使用 `gets()` 函数进行信息录入,可以按照以下方式进行:
```c
#include <stdio.h>
struct MyStruct {
int num;
char name[20];
};
int main() {
struct MyStruct luru[10];
// 录入信息
for(int i = 0; i < 10; i++) {
printf("请输入第 %d 个结构体的数字和名字:\n", i+1);
scanf("%d", &luru[i].num);
getchar(); // 读取多余的换行符
gets(luru[i].name);
}
// 打印录入的信息
for(int i = 0; i < 10; i++) {
printf("第 %d 个结构体的数字为:%d,名字为:%s\n", i+1, luru[i].num, luru[i].name);
}
return 0;
}
```
在这个例子中,我们在录入数字后使用 `getchar()` 函数读取多余的换行符,防止其对 `gets()` 函数的调用产生影响。然后我们使用 `gets()` 函数读取字符串类型的数据,存储到结构体数组的相应成员变量中。最后通过循环打印出录入的信息。
#include <stdio.h> #define N 3 typedef struct stu_type { char no[8]; char name[20]; int age; }STU; int main() { int count(STU s[]); int i,sum=0; STU student[N]; for(i=0;i<N;i++) { gets(student[i].no); gets( student[i].name ); scanf("%d", &student[i].age ); getchar(); } sum=count(student); printf("%d\n",sum); return 0; } int count(STU s[]) { int sum=0; int i; for(i=0;i<N;i++) if(s[i].age<20) sum++; return sum; }详细地解释这段代码
这段代码实现了一个简单的学生信息管理程序。程序定义了一个结构体类型STU,包含学生的学号、姓名和年龄三个属性。程序中使用了一个宏定义N来表示学生数量,这里定义为3。主函数中定义了一个STU类型的数组student,用于存储三个学生的信息。在for循环中,程序通过gets函数分别读入学号、姓名和年龄,然后使用scanf函数读入年龄,最后使用getchar函数读取输入缓冲区中的回车符,以便下一次输入。输入完毕后,程序调用count函数,计算年龄小于20岁的学生数量,最后输出结果。count函数遍历数组s,如果数组元素的年龄小于20,就将计数器sum加1。最后,count函数返回sum作为结果。