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 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥170 如图所示配置eNSP
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果