我遇到了这个奇怪而神秘的(至少对我来说)错误,我发现很难找到。它在我调用我的函数input(student_list1[MAX], &total_entries);
的行中给出了一个错误,其中编译器说:
'input'中的文字1的不兼容类型
我在这里做错了什么?我感觉它非常简单和愚蠢,但我现在已经多次查看代码而没有任何效果。
#define MAX 10
#define NAME_LEN 15
struct person {
char name[NAME_LEN+1];
int age;
};
void input(struct person student_list1[MAX], int *total_entries);
int main(void)
{
struct person student_list1[MAX];
int total_entries=0, i;
input(student_list1[MAX], &total_entries);
for(i=0; i<total_entries; i++)
{
printf("Student 1:\tNamn: %s.\tAge: %s.\n", student_list1[i].name, student_list1[i].age);
}
return 0;
} //main end
void input(struct person student_list1[MAX], int *total_entries)
{
int done=0;
while(done!=1)
{
int i=0;
printf("Name of student: ");
fgets(student_list1[i].name, strlen(student_list1[i].name), stdin);
student_list1[i].name[strlen(student_list1[i].name)-1]=0;
if(student_list1[i].name==0) {
done=1;
}
else {
printf("Age of student: ");
scanf("%d", student_list1[i].age);
*total_entries++;
i++;
}
}
}
答案 0 :(得分:1)
struct person student_list1[MAX]
实际上是指向struct person student_list1
的指针。
student_list1[MAX]
是数组struct person student_list1[MAX]
的(出界)成员。有效数组索引应在0
到MAX - 1
之间。
将其更改为:
input(student_list1, &total_entries);
请注意,此处数组名称student_list1
会自动转换为指向student_list1[0]
的指针。
答案 1 :(得分:1)
代码有很多问题;这是我尝试使它更有力:
#include <stdio.h>
#include <string.h>
#define MAX 10
#define NAME_LEN 15
// use a typedef to simplify code
typedef struct person {
char name[NAME_LEN];
int age;
} person_t;
// size qualifier on student_list is redundent and person_t* does the same
void input(person_t *student_list, int *total_entries);
int main(void)
{
person_t student_list[MAX];
int total_entries, i;
// pass array and not the non-existent 'student_list[MAX]' element
input(student_list, &total_entries);
for(i=0; i<total_entries; i++)
{
// age is an int, not a string so use %d
printf("Student 1:\tName: %s.\tAge: %d.\n", student_list[i].name, student_list[i].age);
}
return 0;
} //main end
void input(person_t *student_list, int *total_entries)
{
int done = 0, i = 0;
*total_entries = 0;
while (i < MAX) {
printf("Name of student: ");
// use NAME_LEN instead of strlen(list[i].name) because latter is
// probably not initialized at this stage
if (fgets(student_list[i].name, NAME_LEN, stdin) == NULL) {
return;
}
// detect zero-length string
if (student_list[i].name[0] == '\n') {
return;
}
printf("Age of student: ");
scanf("%d", &student_list[i].age);
// read the newline
fgetc(stdin);
*total_entries = ++i;
}
}
答案 2 :(得分:0)
input(student_list1[MAX], &total_entries);
应为input(student_list1, &total_entries);
。
在C中,
void input(struct person student_list1[MAX], int *total_entries);
等于
void input(struct person *student_list1, int *total_entries);