首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将10个学生信息存储在结构中,调试断言失败

将10个学生信息存储在结构中,调试断言失败
EN

Stack Overflow用户
提问于 2022-05-31 09:50:00
回答 2查看 44关注 0票数 1

我写了这篇文章,但是它总是给出一个调试断言失败的错误,在进入年龄之后。

我尝试了我所知道的一切,也用网上的例子来检查,但找不出出了什么问题。

代码语言:javascript
复制
#include <stdlib.h>
#include <stdio.h>

struct student
{
    char name[50];
    float age;
    float grade[2];
    float gpa;

};

int main() {
    struct student s[10];
    int i;

    for (i = 0; i < 10; i++) {
        printf("please enter the %d student's name\n", i + 1);
        scanf_s(" %s ", &s[i].name, 20);
        printf("please enter the student's age\n");
        scanf_s("%f", &s[i].age);
        printf("please enter the physics score\n");
        scanf_s("%.2f", &s[i].grade[0]);
        printf("please enter the maths score\n");
        scanf_s("%.2f", &s[i].grade[1]);
        s[i].gpa = (s[i].grade[0] + s[i].grade[1]) / 2;
    }
    printf(" name\t\t age\t physics\tmaths\tgpa\n");
    printf("_____________________________________________________________________");
    for (i = 0; i < 10; i++) {
        printf("%s\t %f\t %.2f\t%.2f\t%.2f\n", s[i].name, s[i].age, s[i].grade[0], s[i].grade[1], s[i].gpa);
    }
    return 0;
}
EN

回答 2

Stack Overflow用户

发布于 2022-05-31 10:36:31

我想您使用的是。你得告诉我们这些细节。

您在滥用scanf_s,编译器警告您这一点。这些警告应视为错误。

忘记scanf_s,转而使用scanf。要做到这一点,您需要将其放在源代码的最上面:

代码语言:javascript
复制
#define _CRT_SECURE_NO_WARNINGS

此外,将"%.2f"替换为"%f",并记住scanf不是printf,一些格式说明符(如%s%d )是相同的,而另一些则不是。还将scanf(" %s ", &s[i].name);替换为scanf("%s", s[i].name);

请注意,您不能使用scanf%s输入包含空格的名称,请使用"%[^\n]"而不是%s (但这是一个高级主题),暂时不要费心。

无论如何,scanf绝对不适合实际程序中的交互式用户输入,对于小型测试程序也是可以的。

票数 2
EN

Stack Overflow用户

发布于 2022-05-31 10:40:25

代码语言:javascript
复制
#include <stdlib.h>
#include <stdio.h>

struct student
{
    char name[50];
    float age;
    float grade[2];
    float gpa;

};

int main() {
    struct student s[10];
    int i;

    for (i = 0; i < 10; i++) {
        printf("please enter the %d student's name\n", i + 1);
        scanf("%s", &s[i].name[0]);
        printf("please enter the student's age\n");
        scanf("%f", &s[i].age);
        printf("please enter the physics score\n");
        scanf("%f", &s[i].grade[0]);
        printf("please enter the maths score\n");
        scanf("%f", &s[i].grade[1]);
        s[i].gpa = (s[i].grade[0] + s[i].grade[1]) / 2;
    }
    printf(" name\t\t age\t physics\tmaths\tgpa\n");
    printf("_____________________________________________________________________");
    for (i = 0; i < 10; i++) {
        printf("%s\t %f\t %.2f\t%.2f\t%.2f\n", s[i].name, s[i].age, s[i].grade[0], s[i].grade[1], s[i].gpa);
    }
    return 0;
}

我刚才分享的代码是我相信你想要的。我所做的更改:使用scanf而不是scanf_s;取消了第一个scanf()上引号之间的空格;在&si.name之后添加了一个地址,以便为scanf()函数提供一个地址;还将%.2f替换为%f,函数scanf()不允许;

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72445646

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档