C语言,提问一个关于结构体的问题

问题描述:

devc++

#include<stdio.h>
#define N 2
struct tele
{
    char name;
    int telenumber;
    char email;
};
struct tele tel[N];
int main()
{
    void print(struct tele tel[N]);
    int i;
    for(i=0;i<N;i++)
    {
        printf("\n请输入第%d个同学的通讯录:\n",i+1);
        printf("姓名:");scanf("%c",&tel[i].name);
        printf("电话号码:");scanf("%d",&tel[i].telenumber);
        printf("电子邮件地址:");scanf("%c",&tel[i].email);
    }
    printf("\n");
    print(tel);
}
void print(struct tele tel[N])
{
    int i;
    printf("\n姓名  电话号码  电子邮件地址\n");
    for(i=0;i<N;i++)
    {
        printf("%c %d %c",tel[i].name,tel[i].telenumber,tel[i].email);
        printf("\n");
    }
}


```题目是建立简单的同学通讯录,输入10个同学的通讯信息(通讯录信息包括姓名、电话号码、电子邮箱)并输出。
为了方便测试,把代码中的人数改少了,代码如下:

#include<stdio.h>
#define N 2
struct tele
{
    char name;
    int telenumber;
    char email;
};
struct tele tel[N];
int main()
{
    void print(struct tele tel[N]);
    int i;
    for(i=0;i<N;i++)
    {
        printf("\n请输入第%d个同学的通讯录:\n",i+1);
        printf("姓名:");scanf("%c",&tel[i].name);
        printf("电话号码:");scanf("%d",&tel[i].telenumber);
        printf("电子邮件地址:");scanf("%c",&tel[i].email);
    }
    printf("\n");
    print(tel);
}
void print(struct tele tel[N])
{
    int i;
    printf("\n姓名  电话号码  电子邮件地址\n");
    for(i=0;i<N;i++)
    {
        printf("%c %d %c",tel[i].name,tel[i].telenumber,tel[i].email);
        printf("\n");
    }
}



![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/682554456936172.png "#left")
输入到电子邮件部分(也就是一个字符)就会自动跳过,真的百思不得其解,求解答
另外,为什么scanf函数里面不加&(取地址运算符)就不行呢?我看到书本上的有些可以不加,不知道为什么


1)修改一下你的结构体,char只能输入一个字符,char数组可以是多个。
2)百度一下scanf函数的用法。

#define NAME_LEN  64
#define EMAIL_LEN  64

struct tele {
    char name[NAME_LEN];
    int telenumber;
    char email[EMAIL_LEN];
};

好吧第一次用csdn,这代码提交了两次,抱歉抱歉