昨夜一点星辰 发表于 2021-1-30 16:49

重拾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:;

那边 发表于 2021-1-30 16:54

scanf_s("%s", pArr.name);
scanf_s("%s", pArr.name);
你写两次试试!或者加个getchar(),我记得字符串输入回车也算一次!

昨夜一点星辰 发表于 2021-1-30 16:57

那边 发表于 2021-1-30 16:54
scanf_s("%s", pArr.name);
scanf_s("%s", pArr.name);
你写两次试试!或者加个getchar(),我记得字符串输 ...

不行哦,连getchar();都给屏蔽了,直接跳出黑框

飘零星夜 发表于 2021-1-30 17:01

scanf_s("%d", &pArr.age); //%d 的格式 你为什么要输入 aa

昨夜一点星辰 发表于 2021-1-30 17:03

飘零星夜 发表于 2021-1-30 17:01
scanf_s("%d", &pArr.age); //%d 的格式 你为什么要输入 aa

{:301_999:}不好意思哈,我为了演示测试结果,忘了这个小错误了。
它输入int 型也不行呀{:301_1007:}

那边 发表于 2021-1-30 17:05

改成这样,scanf_s("%s", &pArr.name,30);网上搜的https://blog.csdn.net/a17603847137/article/details/101523257不懂什么原因,可以用用dev c++,vs太严谨了

古月不傲 发表于 2021-1-30 17:08

昨夜一点星辰 发表于 2021-1-30 16:57
不行哦,连getchar();都给屏蔽了,直接跳出黑框

if (!(ret = scanf("%d", &pArr.age)))
                {
                        printf("输入非法的字符串\n");
                        return -1;
                }


你输入的是字符串,加点判断即可

昨夜一点星辰 发表于 2021-1-30 17:09

那边 发表于 2021-1-30 17:05
改成这样,scanf_s("%s", &pArr.name,30);网上搜的https://blog.csdn.net/a17603847137/article/details/10 ...

{:301_1009:}牛掰,解决了,确实是它的问题,但是问题出在哪里了?老哥你讲讲呗,怎么就占用非法内存了{:301_1007:}

cutthesoul 发表于 2021-1-30 17:09

我用GCC能正常跑下来

昨夜一点星辰 发表于 2021-1-30 17:10

古月不傲 发表于 2021-1-30 17:08
if (!(ret = scanf("%d", &pArr.age)))
                {
                        printf("输入非法的字符串\n");
...

{:301_978:}好的,谢啦
页: [1] 2
查看完整版本: 重拾C语言