c语言输入时出现跳过输入的情况,输出时一片空白

输入时性别和电话的输入直接跳过了
输出时表中没有信息
我改了几遍代码,实在是不知道错在哪里,希望有人指点指点。

img

img

img

img

代码如下:#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);
    };