_C语言_结构体_vistodio_c报错.+初学者的自闭瞬间。哎。

在C语言中一直用不好子函数,

前几天看书+视频教学终于弄懂了,

想着用大一上做到的课设重新打一遍

工资纳税系统(不能说是系统就是一个控制台窗口连程序都算不上哈哈哈但是当时做出来的时候真的就是蛮高兴地);

大概就是这个样子还有一些简单的功能但是这个程序中的查询功能有很多漏洞看程序:

大概就是这个样子。

稍微仔细一点的初学者都会看出来这个查询方法的漏洞只是把想要查询的员工的姓名和数组进行比较。如果查询个张三但是在程序存储的时候刚好有个张四在张三的前面那么程序就只会输出张四的信息。因为这里的程序只是比较了代码的第一个字符无法判断全部的字符。但是这个优点是只用了数组就解决了查询的问题,(因为当时老师没有教结构体自己也不知道有这个东西。。。。。)

之后呢在这个这个课程设计也算是对付过关了。

当时报名了个蓝桥杯就是没有咋准备,就是在快要考试的时候看了几页书才发现了有结构体这个好东西,就是说但是一口气把谭浩强老师的那本入门C语言看完了之后呢蓝桥杯因为是c组也算是坐上了几道题混了个省二但是真的是好菜有好几道有思路但还是不会写。

哎哎说多了。就是这几天比完赛,一直想着那个课设里面查询的地方,换成结构体就是开始敲代码昨天晚上敲了半天的代码结构没敲出来几行就是无语死了问题出现在了总是进行到子函数就会出现错误。想了半天也不懂最后因为自习室关也就不了了之了。

今天来到CSDN上面找到了这位大哥的文章才发现了自己的错误。

C语言结构体数组,结构体数组的定义,结构体数组的输出,结构体的应用_北芳科技-蓝盒子itbluebox的博客-CSDN博客_结构体数组C语言结构体数组,结构体数组的定义,结构体数组的输出,结构体的应用_北芳科技-蓝盒子itbluebox的博客-CSDN博客_结构体数组

 就是这个代码想要实现学生信息管理系统:

#define _CRT_SECURE_NO_WARNINGS 1;
#include<stdio.h>
#include<string.h>
typedef struct stu {
	char name[20];
	char sex[5];
	int id;
	int pay;//年龄;
}STU;
void sc(STU x, int n);
int main()
{
	STU  a[20];
	int i, j, t,n;
	printf("请输入想要录入员工人数:");
	scanf("%d", &n);
	getchar();
	for (i = 1; i <= n; i++)
	{
		printf("姓名\t性别\tId\t年龄\n");
		scanf("%s %s %d %d", &a[i].name, &a[i].sex, &a[i].id, &a[i].pay);
	}
	sc(a[0], n);
	return 0;
}
void sc(STU x[], int n)
{
	int i, j, t;
	for (i = 1; i <= n; i++)
	{
		printf("%d\t 姓名:%s\t性别:%s \tID:%d \t年龄:%d\n", i,x[i].name, x[i].sex, x[i].id, x[i].pay);
	}
}

 运行结果如下:

 

 在这里输出结果完全是驴唇不对马嘴。就是这块把我整的好苦啊问了一个群里面的几个人都说不出来一二三,初学者苦呀今天在修改的时候。发现了错误:

就是在第10行在声明函数的时候void sc(STR x[],int n);这句没有加上‘[]’这个东西,之后把它加上就好了,气人的是这个地方总是不会报错,

 改正完之后终于能运行成功了:

结构体指针可参考:(70条消息) c函数传递结构体数组_潘旭阳的博客-CSDN博客_向函数传递结构体数组

 结构体数组看参考:(上面的那个)

C语言结构体数组,结构体数组的定义,结构体数组的输出,结构体的应用_北芳科技-蓝盒子itbluebox的博客-CSDN博客_结构体数组

 还有吐槽一下:

1.为什么子函数没有传入东西就不会报错,虽然知道这是自己的原因。但还是想吐槽。

2.这个C语言真的要学的东西好多不知道自己能不能坚持住。

3.蓝桥杯没有什么含金量就C组来说,如果家里有钱想要尝试的话也可以。或者说B组或者A组的题看起来好难,备考的时候看了结构体指针啥的结果人家都没有考就是简简单单的循环。

4.加上一个和自己感兴趣的QQ群找一群朋友一起学习,当你感受到帮助别人解决问题的快乐时候真的很好,美美看见一些初学者在群里请教问题,就会想到去年那时根本就是个木嘎哒哈哈哈一点一点报错一点一点找出来往往最后会把自己气笑了。

5.还有就是最近在努力的学习计算机网络技术。最近学校在搞一个SOS活动针对那些即将科目薄弱得同学让老师帮帮忙:我十分自信没有我。。。。结果:

 之后毅然决然的加入这个计划。毕竟最好不要挂科呀。

6.退了加入的学生组织,虽然在组织里面很好,但是我赶脚还是专升本重要些。

7.今天是第一次发表CSDN从刚刚找到这个错误的的时候开始就是想记录一下顺便把错误分享一下,其实细节上还有很多要说的但是肯定没有一本专业的书上面说的好。真心想学习就找一本书翻来覆去的看最近也在看算法啥的虽然都是一些非常非常入门的东西什么栈或者队列啥的。尤其是那个深度优先搜索就是整不明白了。说多了都是泪只能说自己是foolish哎。一会还有一个白嫖的网课要上拜拜了您嘞。

  • 加油每一个刚刚入门的程序员还有就是准备在这条路上走下去的人。

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
### 回答1: 好的,我了解您的问题。在 C 语言中,结构体内部可能包含指向其他数据类型的指针,例如指向整数、字符、数组或其他结构体等。使用 memset 函数可以将一个结构体中的所有成员都初始化为特定的值,包括指针类型的成员。 需要注意的是,使用 memset 函数初始化结构体内指针类型的成员时,只是将它们的值设为 NULL 或 0,并没有为它们分配内存空间。如果需要使用这些指针类型的成员,需要在初始化后手动分配内存空间。 下面是一个使用 memset 函数初始化结构体的示例代码: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> struct Student { int id; char name[20]; int *scores; }; int main() { struct Student stu; memset(&stu, 0, sizeof(struct Student)); // 初始化为0 printf("id: %d\n", stu.id); printf("name: %s\n", stu.name); printf("scores: %p\n", (void*)stu.scores); return 0; } ``` 输出结果为: ``` id: 0 name: scores: (nil) ``` 可以看到,通过使用 memset 函数将结构体初始化为 0 后,结构体内的所有成员都被赋值为 0 或 NULL。 ### 回答2: 在C语言中,我们可以使用memset函数来给结构体内的指针变量进行初始化或者赋值。memset函数的原型是void *memset(void *s, int c, size_t n),它的作用是将某个内存块的每一个字节都设置为特定的值。 在使用memset函数给结构体内的指针变量进行初始化时,需要注意几个问题。首先,如果指针变量的类型是指向动态分配的内存(如使用malloc函数),那么在使用memset函数之前,需要确保该指针变量已经指向了有效的内存空间,否则将会引发错误。其次,在为指针变量进行初始化时,需要将第二个参数c设置为0,表示将指针变量的值设置为NULL。 下面举一个例子来说明memset函数的使用。假设我们有一个结构体变量person,它包含了姓名和年龄两个成员,其中姓名是一个指针变量。 ```c #include <stdio.h> #include <stdlib.h> #include <string.h> struct Person { char *name; int age; }; int main() { struct Person person; char name[10] = "John"; person.name = malloc(strlen(name) + 1); strcpy(person.name, name); printf("Before memset: %s\n", person.name); // 使用memset函数对指针变量进行初始化 memset(person.name, 0, strlen(name) + 1); printf("After memset: %s\n", person.name); free(person.name); return 0; } ``` 在上述代码中,我们首先使用malloc函数为person.name指针变量动态分配了足够的内存空间,并将name数组的值复制给person.name。然后,我们使用memset函数将person.name的值初始化为0,即将其设置为NULL。最后,我们释放person.name所指向的内存空间。 总结来说,使用memset函数可以方便地对结构体内的指针变量进行初始化,但在使用之前需要确保指针变量已经指向了合法的内存空间。在为指针变量进行初始化时,将参数c设置为0即可将其值设置为NULL。 ### 回答3: 在C语言中,可以使用memset函数对结构体内的指针进行初始化。memset函数用于将一块内存区域的每个字节都设置为某个给定的值。 在使用memset函数对结构体内的指针进行初始化时,需要注意几点: 首先,结构体中的指针变量需要提前分配内存空间,可以使用malloc函数动态分配内存或者将指针指向一个已经存在的内存区域。 其次,当对结构体进行初始化时,可以将指针变量的每个字节都设置为空或者设置为某个特定的值。例如,可以使用memset(&struct_name, 0, sizeof(struct_name))将结构体中的所有字节都设置为0;或者使用memset(&struct_name, 0xFF, sizeof(struct_name))将结构体中的所有字节都设置为0xFF。 最后,需要注意的是,memset函数只能对存储在内存中的数据进行操作,不能对指针进行初始化。也就是说,如果结构体中的指针变量指向的是堆内存(由malloc函数分配),则可以使用memset函数初始化;若指针指向的是栈内存或者全局变量,则不能使用memset函数进行初始化,应该使用赋值操作进行初始化。 综上所述,使用memset函数可以在C语言中对结构体内的指针进行初始化,但需要注意指针的内存分配和赋值的方式。在使用memset函数时,可以根据具体需求将指针的每个字节都设置为特定的值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

纯爷们!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值