程序改错。以下程序用于打印输出结构体数组的所有元素。 struct s { char name[10]; int age; } main() { struct s a[3] = {”john”,19,”paul”,17,”marry”,18}; int *p; for(p = a; p < 3; p++) { printf("%s,%d\n", p->name, p->age ); } }
时间: 2023-05-31 12:19:36 浏览: 77
### 回答1:
这是一段 C 语言程序,用于打印输出结构体数组 a 中所有元素的名称和年龄。其中,结构体 s 有两个成员变量,分别为 name 和 age,分别表示姓名和年龄。程序中通过循环遍历结构体数组 a 中的每个元素,并使用指针 p 指向当前元素,然后使用 printf 函数打印输出姓名和年龄。
### 回答2:
这段程序有若干问题,需要进行改错。
首先,程序中定义的结构体s缺少分号,在结构体定义的最后需要添加一个分号。应该是这样的:
struct s {
char name[10];
int age;
};
其次,在main函数里面定义结构体数组a时,每个元素之间需要使用逗号分隔。此外,需要注意的是,name数组应该使用双引号而不是中文引号。应该是这样的:
struct s a[3] = {{"john", 19}, {"paul", 17}, {"marry", 18}};
再次,在for循环中,需要把p的数据类型从int指针改为结构体指针。此外,循环的终止条件也需要进行修改。应该是这样的:
struct s *p;
for (p = a; p < a + 3; p++) {
printf("%s,%d\n", p->name, p->age);
}
最后,printf函数的格式化字符串中出现了中文符号逗号,需要将其改为英文逗号。
完整改正后的程序如下:
#include <stdio.h>
struct s {
char name[10];
int age;
};
int main() {
struct s a[3] = {{"john", 19}, {"paul", 17}, {"marry", 18}};
struct s *p;
for (p = a; p < a + 3; p++) {
printf("%s, %d\n", p->name, p->age);
}
return 0;
}
### 回答3:
这段程序存在以下问题需要进行改正:
1. 在结构体数组创建时,缺少了结构体成员之间的逗号分隔,应该改为:
struct s a[3] = {{"john",19},{"paul",17},{"marry",18}};
2. 在循环时,指针p的类型为int *,应该改为结构体指针类型,即struct s *p;
3. 在循环时,比较指针p与数组大小3时,应该使用指针的运算方式,即p < a+3;
综上所述,改正后的程序如下:
#include <stdio.h>
struct s {
char name[10];
int age;
};
int main() {
struct s a[3] = {{"john",19},{"paul",17},{"marry",18}};
struct s *p;
for(p = a; p < a+3; p++) {
printf("%s,%d\n", p->name, p->age);
}
return 0;
}
以上程序可以正确打印出结构体数组中的所有元素。