苏溪和斯斯 2021-12-28 20:23 采纳率: 66.7%
浏览 42
已结题

C语言程序运行问题:正常输入手机号和邮箱之后,输出时手机号后边连着邮箱,这是怎么回事?

运行结果:

img


我的代码:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
struct people
{
    char name[20];
    char phone[11];
    char email[30];
    char company[30];
} x[100];
/*全局变量*/
int i = 0;
int n = 0;
int count = 0;
int m = 0;
/*函数声明*/
void ReadFromFlie();
void WriteToFile();
void Display();
void InputRecord();
void menu();
void asdf();
void del();
void modify();
/*检测文件是否存在,若不存在则创建*/
void createfile()
{
    FILE *fph;
    if(access("person.txt",F_OK)==-1)
    {
        if((fph=fopen("person.txt","wb"))==NULL)
        {
            printf("创建文件失败");
        }
        fclose(fph);
    }
    return;
}
//读取文件
void ReadFromFile()
{
    int i = 0;
    FILE *fp = NULL;
    if((fp = fopen("person.txt","r+")) == NULL)
    {
        printf("读取文件失败!\n");
        return;
    }
    while(!feof(fp))
    {
        fscanf(fp,"%s %s %s %s",x[i].name,x[i].phone,x[i].email,x[i].company);
        i++;
    }
    n = i-1;
    fclose(fp);
}
//写入文件保存
void WriteToFile()
{
    int i;
    FILE *fp;
    fp = fopen("person.txt", "w");
    for (i = 0; i < n; i++)
    {
        fprintf(fp,"%s %s %s %s",x[i].name,x[i].phone,x[i].email,x[i].company);
    }
    printf("保存成功!\n");
    fclose(fp);
    system("pause");
}
//显示全部信息
void Display()
{
    system("cls");
    int i;
    printf("\n\t          通讯录         \n\n");
    printf("姓名    手机号          电子邮件            公司\n");
    for(i = 0; i < n; i++)
    {
        printf("%s , %s , %s , %s",x[i].name,x[i].phone,x[i].email,x[i].company);
        printf("\n");
    }
    system("pause");
}
//添加信息
void InputRecord()
{
    int i = n,j,flag;
    printf("要添加的联系人个数:");
    scanf("%d",&m);
    if(m > 0)
    {
        do
        {
            flag = 1;
            while (flag)
            {
                flag = 0;
                printf("输入联系人姓名:\n");
                scanf("%s", x[i].name);
                for (j = 0; j < i; j++)
                {
                    if (strcmp(x[i].name, x[j].name) == 0)
                    {
                        printf("该联系人已经存在了!\n");
                        flag = 1;

                    }
                }
            }
            printf("输入联系人电话:\n");
            scanf("%s", x[i].phone);
            printf("输入联系人电子邮件:\n");
            scanf("%s", x[i].email);
            printf("输入联系人公司:\n");
            scanf("%s",x[i].company);
            if (flag == 0)
            {
                i ++;
            }
        }
        while (i < n+m);
    }
    n += m;
    printf("联系人添加成功\n");

}



//菜单
void menu()
{
    printf("\n----------------通讯录-----------------\n");
    printf("\n\t 1.显示所有联系人\n");
    printf("\n\t 2.添加新的联系人\n");
    printf("\n\t 3.修改联系人信息\n");
    printf("\n\t 4.删除联系人信息\n");
    printf("\n\t 5.按姓名查找联系人\n");
    printf("\n\t 0.退出系统\n");
    printf("\n----------------通讯录-----------------\n");
}

//查询信息
void asdf()
{
    int i, flag = 0;
    char s1[20];
    printf("输入需要查询的姓名:\n");
    scanf("%s", s1);
    for (i = 0; i<n; i++)
        if (strcmp(s1,x[i].name) == 0)
        {
            flag = 1;
            printf("姓名    手机号    电子邮件    公司\n");

            printf("%s  %s          %s      %s\n",x[i].name,x[i].phone,x[i].email,x[i].company);
        }
    if (flag == 0)
        printf("该联系人不存在\n");
}

//删除信息
void del()
{
    int i, j, flag = 0;
    char s1[20];
    printf("需要删除联系人的姓名:\n");
    scanf("%s", s1);
    for (i = 0; i < n; i++)
    {
        if (strcmp(x[i].name, s1) == 0)
        {
            flag = 1;
            for (j = i; j < n - 1; j++)
            {
                x[j] = x[j + 1];
            }
        }
    }
    if (flag == 0)
    {
        printf("该联系人不存在!!!\n");
    }
    if (flag == 1)
    {
        printf("删除成功!!!");
        n--;
    }
}

//修改信息
void modify()
{
    int i, item, name = -1;
    char  s1[20];
    printf("需要修改联系人的姓名:\n");
    scanf("%s", s1);
    for (i = 0; i < n; i++)
    {
        if (strcmp(x[i].name, s1) == 0)
        {
            name = i;
            printf("1.修改电话号码\n");
            printf("2.修改电子邮件\n");
            printf("3.修改公司\n");
            printf("4.退出该菜单\n");
            while (1)
            {
                printf("请选择要修改的选项:");
                scanf("%d", &item);
                switch (item)
                {
                case 1:
                    printf("请输入新的手机号码:\n");
                    scanf("%s",x[name].phone);
                    break;
                case 2:
                    printf("请输入新的电子邮件:\n");
                    scanf("%s", x[name].email);
                    break;
                case 3:
                    printf("请输入新的公司:\n");
                    scanf("%s",x[name].company);
                case 4:
                    return;
                default:
                    printf("请选择1-3\n");
                }
            }
            printf("修改完成!\n");
        }
        else
        {
            printf("找不到这个人!");
        }
    }

}
//主函数
int main(void)
{
    createfile();
    while(1)
    {
        menu();
        printf("输入要选择的选项:");
        scanf("%d", &count);
        switch (count)
        {
        case 1:
            ReadFromFile();
            Display();
            break;
        case 2:
            ReadFromFile();
            InputRecord();
            WriteToFile();
            break;
        case 3:
            ReadFromFile();
            modify();
            WriteToFile();
            break;
        case 4:
             ReadFromFile();
             del();
             WriteToFile();
            break;
        case 5:
            ReadFromFile();
            asdf();
            break;
        case 0:
            printf("\n欢迎下次使用");
            exit(0);
        default:
            printf("请输入0-5之间的选项\n");
        }
    }
    return 0;
}


  • 写回答

3条回答 默认 最新

  • 关注
    char phone[11];
    

    改成

    char phone[12];
    

    因为字符输入时会在字符串结尾处多加一个'\0'表示字符串结束.
    所以设置字符数组长度时要多加一个字符.

    如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 1月5日
  • 已采纳回答 12月28日
  • 创建了问题 12月28日

悬赏问题

  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探