qq_39099414 2022-11-16 23:33 采纳率: 60%
浏览 12
已结题

关于编写简易通讯录程序时遇到的空格输入问题

如图,在运行Add_a_contact函数时想在name里输入带空格的字符串,name会和number跳到同一行去,且无法输入name,无论是用gets还是%[^\n]都是同样的输出结果。初学者求解,谢谢!

#include <stdio.h>
#include <stdlib.h>
#include <string.h>





struct Information
{
    char name[255];
    char number[255];
    char email[255];
    char department[255];
}Information;

struct Contact_list
{
    int sizeofContact;
    struct Information context[500];
};

void Print_contact_list (const struct Contact_list *a) {
    int i = 0;
    for (i = 0; i < a->sizeofContact; i++)
    {
        printf("%s\t%s\t%s %s\n",a->context[i].number,a->context[i].email,a->context[i].name,a->context[i].department);
    }

}

void Add_a_contact (struct Contact_list *a)
{
    printf("Name:");
    scanf("%[^\n]",a->context[a->sizeofContact].name);
    printf("Number:");
    scanf("%s",a->context[a->sizeofContact].number);
    printf("Email:");
    scanf("%s",a->context[a->sizeofContact].email);
    printf("Department:");
    scanf("%s",a->context[a->sizeofContact].department);
    a->sizeofContact++;
}




void menu()
{
    printf("1) Print contact list\n");
    printf("2) Add a contact\n");
    printf("3) Modify a contact\n");
    printf("4) Delete a contact\n");
    printf("5) Search\n");
    printf("6) Quit\n");
};


int main()
{
    int x = 0;
    struct Contact_list C;
    do {
        menu();
        printf("Option:");
        scanf("%d",&x);
        switch(x)
        {
            case 1:
                Print_contact_list(&C);
                break;
            case 2:
                Add_a_contact(&C);
                break;
            case 6:
                break;
        }
    } while (x);
    return 0;
}

img

  • 写回答

3条回答 默认 最新

  • CSDN专家-sinJack 2022-11-17 00:05
    关注

    因为缓存问题导致,用getchar()读取掉缓存中的字符。
    输入的字符串中包含空格,要用gets()方法。
    修改如下:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    struct Information
    {
        char name[255];
        char number[255];
        char email[255];
        char department[255];
    }Information;
    struct Contact_list
    {
        int sizeofContact;
        struct Information context[500];
    };
    void Print_contact_list (const struct Contact_list *a) {
        int i = 0;
        for (i = 0; i < a->sizeofContact; i++)
        {
            printf("%s\t%s\t%s %s\n",a->context[i].number,a->context[i].email,a->context[i].name,a->context[i].department);
        }
    }
    void Add_a_contact (struct Contact_list *a)
    {
        getchar(); 
        printf("Name:");
        gets(a->context[a->sizeofContact].name);
        printf("Number:");
        scanf("%s",a->context[a->sizeofContact].number);
        printf("Email:");
        scanf("%s",a->context[a->sizeofContact].email);
        printf("Department:");
        scanf("%s",a->context[a->sizeofContact].department);
        a->sizeofContact++;
    }
     
     
    void menu()
    {
        printf("1) Print contact list\n");
        printf("2) Add a contact\n");
        printf("3) Modify a contact\n");
        printf("4) Delete a contact\n");
        printf("5) Search\n");
        printf("6) Quit\n");
    };
     
    int main()
    {
        int x = 0;
        struct Contact_list C;
        do {
            menu();
            printf("Option:");
            scanf("%d",&x);
            switch(x)
            {
                case 1:
                    Print_contact_list(&C);
                    break;
                case 2:
                    Add_a_contact(&C);
                    break;
                case 6:
                    return 0;
            }
        } while (x);
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 11月25日
  • 已采纳回答 11月17日
  • 创建了问题 11月16日

悬赏问题

  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 关于大棚监测的pcb板设计
  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器
  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
  • ¥15 Vue3地图和异步函数使用
  • ¥15 C++ yoloV5改写遇到的问题