吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1701|回复: 18
收起左侧

[求助] 重拾C语言

[复制链接]
昨夜一点星辰 发表于 2021-1-30 16:49

请教各位大佬一个问题,为什么我每次输入第一个人的信息到了score那里就结束了???百思不得其解特地来论坛请教各位大佬

#include <stdio.h>
#include <malloc.h>
struct student
{
    int age;
    float score;
    char name[100];
};                                        //结构体定义
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[i].age);

        printf("name = ");
        scanf_s("%s", pArr[i].name);

        printf("score = ");
        scanf_s("%f", &pArr[i].score);
    }

    //将学生成绩升序输出 冒泡算法
    for(i=0; i<len-1; ++i)
    {
        for(j=0; j<len-i-1; ++j)
        {
            if(pArr[j].score > pArr[j+1].score)
            {
            t = pArr[j] ;
            pArr[j] = pArr[j+1];
            pArr[j+1] = t;
            }
        }
    }
    printf("\n\n学生的信息是:\n");
    //输出
    for(i=0; i<len; ++i)
    {
        printf("第%d的学生的信息是:\n", i+1);
        printf("age = %d\n", pArr[i].age);
        printf("name = %s\n", pArr[i].name);
        printf("score = %f\n", pArr[i].score);
        printf("\n");
    }
    return 0;
}

运行结果如下:

javascript:;
end.png

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

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

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
昨夜一点星辰 + 1 + 1 谢谢@Thanks!

查看全部评分

 楼主| 昨夜一点星辰 发表于 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[i].age); //%d 的格式 你为什么要输入 aa

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
昨夜一点星辰 + 1 + 1 谢谢@Thanks!

查看全部评分

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

不好意思哈,我为了演示测试结果,忘了这个小错误了。
它输入int 型也不行呀
那边 发表于 2021-1-30 17:05
改成这样,scanf_s("%s", &pArr[i].name,30);网上搜的https://blog.csdn.net/a17603847137/article/details/101523257不懂什么原因,可以用用dev c++,vs太严谨了

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
昨夜一点星辰 + 1 + 1 热心回复!

查看全部评分

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

[C++] 纯文本查看 复制代码
if (!(ret = scanf("%d", &pArr[i].age)))
		{
			printf("输入非法的字符串\n");
			return -1;
		}


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

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
昨夜一点星辰 + 1 + 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 ...

牛掰,解决了,确实是它的问题,但是问题出在哪里了?老哥你讲讲呗,怎么就占用非法内存了
cutthesoul 发表于 2021-1-30 17:09
我用GCC能正常跑下来
 楼主| 昨夜一点星辰 发表于 2021-1-30 17:10
古月不傲 发表于 2021-1-30 17:08
[mw_shl_code=cpp,true]if (!(ret = scanf("%d", &pArr.age)))
                {
                        printf("输入非法的字符串\n");
...

好的,谢啦
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 07:20

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表