重拾C语言
### 请教各位大佬一个问题,为什么我每次输入第一个人的信息到了score那里就结束了???百思不得其解特地来论坛请教各位大佬 ###```
#include <stdio.h>
#include <malloc.h>
struct student
{
int age;
float score;
char name;
}; //结构体定义
int main(void)
{
int i,j;
int len;
struct student * pArr;
struct student t;
//动态构造一维数组
printf("请您输入学生总数:\n");
printf("len = ");
scanf_s("%d", &len);
pArr = (struct student * )malloc(len * sizeof(struct student)); //动态构造一维数组
//输入
for(i=0; i<len; ++i)
{
printf("请输入第%d个学生的信息:\n", i+1);
printf("age = ");
scanf_s("%d", &pArr.age);
printf("name = ");
scanf_s("%s", pArr.name);
printf("score = ");
scanf_s("%f", &pArr.score);
}
//将学生成绩升序输出 冒泡算法
for(i=0; i<len-1; ++i)
{
for(j=0; j<len-i-1; ++j)
{
if(pArr.score > pArr.score)
{
t = pArr ;
pArr = pArr;
pArr = t;
}
}
}
printf("\n\n学生的信息是:\n");
//输出
for(i=0; i<len; ++i)
{
printf("第%d的学生的信息是:\n", i+1);
printf("age = %d\n", pArr.age);
printf("name = %s\n", pArr.name);
printf("score = %f\n", pArr.score);
printf("\n");
}
return 0;
}
```
运行结果如下:
javascript:; scanf_s("%s", pArr.name);
scanf_s("%s", pArr.name);
你写两次试试!或者加个getchar(),我记得字符串输入回车也算一次! 那边 发表于 2021-1-30 16:54
scanf_s("%s", pArr.name);
scanf_s("%s", pArr.name);
你写两次试试!或者加个getchar(),我记得字符串输 ...
不行哦,连getchar();都给屏蔽了,直接跳出黑框 scanf_s("%d", &pArr.age); //%d 的格式 你为什么要输入 aa 飘零星夜 发表于 2021-1-30 17:01
scanf_s("%d", &pArr.age); //%d 的格式 你为什么要输入 aa
{:301_999:}不好意思哈,我为了演示测试结果,忘了这个小错误了。
它输入int 型也不行呀{:301_1007:} 改成这样,scanf_s("%s", &pArr.name,30);网上搜的https://blog.csdn.net/a17603847137/article/details/101523257不懂什么原因,可以用用dev c++,vs太严谨了 昨夜一点星辰 发表于 2021-1-30 16:57
不行哦,连getchar();都给屏蔽了,直接跳出黑框
if (!(ret = scanf("%d", &pArr.age)))
{
printf("输入非法的字符串\n");
return -1;
}
你输入的是字符串,加点判断即可 那边 发表于 2021-1-30 17:05
改成这样,scanf_s("%s", &pArr.name,30);网上搜的https://blog.csdn.net/a17603847137/article/details/10 ...
{:301_1009:}牛掰,解决了,确实是它的问题,但是问题出在哪里了?老哥你讲讲呗,怎么就占用非法内存了{:301_1007:} 我用GCC能正常跑下来 古月不傲 发表于 2021-1-30 17:08
if (!(ret = scanf("%d", &pArr.age)))
{
printf("输入非法的字符串\n");
...
{:301_978:}好的,谢啦
页:
[1]
2