输入时性别和电话的输入直接跳过了
输出时表中没有信息
我改了几遍代码,实在是不知道错在哪里,希望有人指点指点。
代码如下:#include
//声明一个结构体类型
struct stu{
long int stnum;//学生学号
char stname[20];//学生姓名
int age;//年龄
float weight;//体重
char sex;//f女,m男
long int phone;//电话
};
int main(int argc,char *argv[])
{
//建立表
struct stu p[6];
int i;
//输入学生的信息
for(i=0;i<7;i++){
printf("请输入第%d位同学的信息",i+1);
printf("\n姓名:");
gets(p[i].stname);
printf("\n学号:");
scanf("%ld",&p[i].stnum);
printf("\n性别:");
p[i].sex=getchar();
printf("\n年龄:");
scanf("%d",&p[i].age);
printf("\n体重:");
scanf("%.lf",&p[i].weight);
printf("\nTEL:");
scanf("%ld",&p[i].phone);
};
//输出信息
printf("\n学生信息如下:");
printf("\n-\n");
printf("序号\t|\t姓名\t|\t学号\t|\t性别\t|\t年龄\t|\t体重\t|\tTEL\t|\n");
printf("-\n");
for(i=0;i<7;i++){
if(p[i].sex=='f')
printf("i\t|\t%s\t|\t%ld\t|\t女\t|\t%d\t|\t%.lf\t|\t%ld\t|\n",p[i].stname,p[i].stnum,p[i].age,p[i].weight,p[i].phone);
if(p[i].sex=='m')
printf("i\t|\t%s\t|\t%ld\t|\t女\t|\t%d\t|\t%.lf\t|\t%ld\t|\n",p[i].stname,p[i].stnum,p[i].age,p[i].weight,p[i].phone);
printf("-\n");
};
};
由于不能重复输入-,所以我剩下了一个
修改如下,供参考对照:
//代码如下:
#include <stdio.h>
#define N 7
//声明一个结构体类型
struct stu{
long int stnum;//学生学号
char stname[20];//学生姓名
int age;//年龄
float weight;//体重
char sex;//f女,m男
long int phone;//电话
};
int main(int argc,char *argv[])
{
//建立表
struct stu p[N]; //struct stu p[6];
int i;
//输入学生的信息
for(i=0;i<N;i++){
printf("请输入第%d位同学的信息",i+1);
printf("\n姓名:");
scanf("%s",p[i].stname);//gets(p[i].stname);
getchar();
printf("\n学号:");
scanf("%ld",&p[i].stnum);
getchar();
printf("\n性别:");
scanf(" %c",&p[i].sex);//p[i].sex=getchar();
getchar();
printf("\n年龄:");
scanf("%d",&p[i].age);
getchar();
printf("\n体重:");
scanf("%f",&p[i].weight);//scanf("%.lf",&p[i].weight);
getchar();
printf("\nTEL:");
scanf("%ld",&p[i].phone);
getchar();
} //;
//输出信息
printf("\n学生信息如下:");
printf("\n-\n");
printf("序号\t|\t姓名\t|\t学号\t|\t性别\t|\t年龄\t|\t体重\t|\tTEL\t|\n");
printf("-\n");
for(i=0;i<N;i++){
if(p[i].sex=='f')
printf("%d\t|\t%s\t|\t%ld\t|\t女\t|\t%d\t|\t%.lf\t|\t%ld\t|\n",
i+1,p[i].stname,p[i].stnum,p[i].age,p[i].weight,p[i].phone);
if(p[i].sex=='m')
printf("%d\t|\t%s\t|\t%ld\t|\t男\t|\t%d\t|\t%.lf\t|\t%ld\t|\n",
i+1,p[i].stname,p[i].stnum,p[i].age,p[i].weight,p[i].phone);
printf("-\n");
} //;
return 0;
}//;
for(i=0;i<7;i++){
printf("请输入第%d位同学的信息",i+1);
printf("\n姓名:");
gets(p[i].stname);
printf("\n学号:");
scanf("%ld",&p[i].stnum);
printf("\n性别:");
p[i].sex=getchar();
printf("\n年龄:");
scanf("%d",&p[i].age);
printf("\n体重:");
scanf("%.lf",&p[i].weight);
printf("\nTEL:");
scanf("%ld",&p[i].phone);
};
姓名,性别,TEL后面没有scanf啊,加上scanf就好了
结构数组只有6个元素,但你for循环却输入7个元素,数组越界啦
另外最好不要用gets函数,最后的换行符会留在缓冲区。
改为scanf("%s",p[i].stname);
另外if(p[i].sex=='m')时,要输出男
struct stu{
long long stnum;//学生学号
char stname[20];//学生姓名
int age;//年龄
float weight;//体重
char sex;//f女,m男
long long phone;//电话
};
int main(int argc,char *argv[])
{
//建立表
struct stu p[7];
int i;
//输入学生的信息
for(i=0;i<7;i++){
printf("请输入第%d位同学的信息",i+1);
printf("\n姓名:");
scanf("%s",p[i].stname);
printf("\n学号:");
scanf("%ld",&p[i].stnum);
printf("\n性别:");
scanf("%c",&p[i].sex);
printf("\n年龄:");
scanf("%d",&p[i].age);
printf("\n体重:");
scanf("%f",&p[i].weight);
printf("\nTEL:");
scanf("%ld",&p[i].phone);
};
//输出信息
printf("\n学生信息如下:");
printf("\n-\n");
printf("序号\t|\t姓名\t|\t学号\t|\t性别\t|\t年龄\t|\t体重\t|\tTEL\t|\n");
printf("-\n");
for(i=0;i<7;i++){
if(p[i].sex=='f')
printf("i\t|\t%s\t|\t%ld\t|\t女\t|\t%d\t|\t%.lf\t|\t%ld\t|\n",p[i].stname,p[i].stnum,p[i].age,p[i].weight,p[i].phone);
if(p[i].sex=='m')
printf("i\t|\t%s\t|\t%ld\t|\t男\t|\t%d\t|\t%.lf\t|\t%ld\t|\n",p[i].stname,p[i].stnum,p[i].age,p[i].weight,p[i].phone);
printf("-\n");
};
};
清一下输入缓存。尤其是getcahr前面需要清一下,不然会读取上一次输入的回车符
for (i = 0; i < 6; i++) //数组下标为0-5。
{
fflush(stdin);//
printf("请输入第%d位同学的信息", i + 1);
printf("\n姓名:");
gets(p[i].stname);
printf("\n学号:");
scanf("%ld", &p[i].stnum);
printf("\n性别:");
fflush(stdin);//
p[i].sex = getchar();
printf("\n年龄:");
scanf("%d", &p[i].age);
printf("\n体重:");
scanf("%.lf", &p[i].weight);
printf("\nTEL:");
scanf("%ld", &p[i].phone);
};