我无法在c程序的函数内部通过pointer
获取结构fgets
的结构getInput()
;我不确定我做错了什么。 *stu->name = (char*)malloc(N_LENGTH);
函数是崩溃发生的地方。我首先尝试将内存分配给名称将存储在哪里
fgets(*stu->name, N_LENGTH, stdin);
然后通过
获取用户的输入#include <stdio.h>
#include <stdlib.h>
#define UNIT 100
#define HOUSE 1000
#define THRESH 12
#define DISCOUNT 10
#define NUM_PERSONS 5
#define N_LENGTH 30
struct student
{
char *name;
char campus;
int userUnit;
};
void getInput(struct student *stu);
int amountCalc(struct student *stu);
void printOutput(struct student stu, int total);
int main()
{
int total[NUM_PERSONS];
int averageTotal=0;
struct student tempStudent;
struct student students[NUM_PERSONS];
struct student *sPtr = &tempStudent;
int i;
for (i=0; i < NUM_PERSONS; i++)
{
getInput(sPtr);
students[i]=tempStudent;
total[i]=amountCalc(sPtr);
averageTotal+=total[i];
};
for (i=0; i < NUM_PERSONS; i++)
{
printOutput(students[i], total[i]);
};
printf("\nThe average tuition cost for these %d students is $%.2f.\n",
NUM_PERSONS, averageTotal/(NUM_PERSONS*1.0));
return 0;
}
void getInput(struct student *stu)
{
fflush(stdin);
printf("Enter student name: ");
*stu->name = (char*)malloc(N_LENGTH);
fgets(*stu->name, N_LENGTH, stdin);
printf("Enter y if student lives on campus, n otherwise: ");
scanf(" %s", &stu->campus);
printf("Enter current unit count: ");
scanf(" %d", &stu->userUnit);
printf("\n");
}
int amountCalc(struct student *stu)
{
int total;
total=(stu->userUnit)*UNIT;
if (stu->userUnit>THRESH) {
total-=((stu->userUnit)-12)*DISCOUNT;
};
if (stu->campus=='y') {
total+=HOUSE;
};
return total;
}
void printOutput(struct student stu, int total)
{
printf("\nStudent name: %s\n", stu.name);
printf("Amount due: $%d\n\n", total);
}
程序在第一行和第二行崩溃。
很抱歉,如果我违反任何规则,因为这是我第一次访问该网站。
代码:
var arr = $('input[name=id_cot]').map(function() {
return this.value;
}).get();
console.log(arr)
答案 0 :(得分:1)
您的分配错误。真正的分配是这样的;
void getInput(struct student *stu)
{
fflush(stdin);
printf("Enter student name: ");
stu->name = (char*)malloc(N_LENGTH);
fgets(stu->name, N_LENGTH, stdin);
printf("Enter y if student lives on campus, n otherwise: ");
scanf(" %s", &stu->campus);
printf("Enter current unit count: ");
scanf(" %d", &stu->userUnit);
printf("\n");
}
编译时,您可以看到警告。你应该处理所有的警告。并且将malloc转换为(char *)也是不必要的。
答案 1 :(得分:-1)
请勿使用fflush(stdin)
。 See this question.我不知道是否会导致错误但是它没有在C标准中定义,所以也许你的平台无法处理它!
错误的记忆分配也是一个问题,请看@HakkıIşık的回答。