我写了这篇文章,但是它总是给出一个调试断言失败的错误,在进入年龄之后。
我尝试了我所知道的一切,也用网上的例子来检查,但找不出出了什么问题。
#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;
}发布于 2022-05-31 10:36:31
我想您使用的是。你得告诉我们这些细节。
您在滥用scanf_s,编译器警告您这一点。这些警告应视为错误。
忘记scanf_s,转而使用scanf。要做到这一点,您需要将其放在源代码的最上面:
#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绝对不适合实际程序中的交互式用户输入,对于小型测试程序也是可以的。
发布于 2022-05-31 10:40:25
#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()不允许;
https://stackoverflow.com/questions/72445646
复制相似问题