脑子不好真君 2022-11-22 13:48 采纳率: 75%
浏览 11
已结题

C语言结课提问,求帮

我想用scanf输入成员分工,但含有空格和逗号再回车成员年龄就无法输入了,求解
问题图片:

img

用%[^\n]和三个scanf分别输入三个成员工作试过,也无法输入成员年龄

img

img

代码:

#include<stdio.h>
#include<conio.h>//getch()的头文件
#include<stdlib.h>//malloc()的头文件



//定义一个项目
typedef struct _Project//typedef另外命名
{
    char number[50];
    char name[20];
    char time[100];
    char boss[20];
    double money;
    char state[50];
    char age[50];
    char works[200];
    char sex[30];
}Project;



//结点
typedef struct _Node
{
    Project Pro;
    struct _Node* pNext;//指向下一个结点
}Node;



//函数声明
void InputInformation();//声明录入项目信息的函数
void PrintInformation();//声明保存项目信息的函数



//头结点
Node *g_pHead = NULL;



int main()
{
    while (1)
    {
        printf("--------------------------------------------------\n");
        printf("------     welcome to 科技项目管理系统      ------\n");
        printf("--------------------------------------------------\n");
        printf("------              1.录入项目信息:        ------\n");
        printf("------              2.打印成员信息:        ------\n");
        printf("------              3.读取可完成审批:      ------\n");
        printf("------              4.添加项目:            ------\n");
        printf("------              5.删除项目:            ------\n");
        printf("------              6.查询项目:            ------\n");
        printf("------              7.保存项目:            ------\n");
        printf("--------------------------------------------------\n");
        printf("请输入选择:\n");
        char ch = getch();//从键盘获取一个字符,终止while1)的死循环,并getch()不需要用户输入回车
        switch (ch)
        {
        case'1':
            InputInformation();//调用项目编号函数
            break;//getch()读取的字符,所以case1’需要用单引号,以下同理
        case'2':
            PrintInformation();//调用成员信息函数
            break;
        case'3':break;
        case'4':break;
        case'5':break;
        case'6':break;
        case'7':break;
        }
    }
    return 0;
}
//录入项目信息
void InputInformation()//定义项目信息的函数
{
    //创建一个新结点
    Node *pNewNode = (Node*)malloc(sizeof(Node));
    pNewNode->pNext = NULL;
    //头插法
    if (pNewNode == NULL)
    {
        g_pHead = pNewNode;
    }//如果头结点为空,则新节点为头结点
    else
    {
        pNewNode->pNext = g_pHead;
        g_pHead = pNewNode;
    }//如果头结点不为空,则新结点为头结点
    printf("请输入项目编号:\n");
    scanf("%s", pNewNode->Pro.number);

    printf("请输入项目名称:\n");
    scanf("%s", pNewNode->Pro.name);

    printf("请输入项目申报时间:\n");
    scanf("%s", &pNewNode->Pro.time);

    printf("请输入项目负责人:\n");
    scanf("%s", &pNewNode->Pro.boss);

    printf("请输入项目预算金额:\n");
    scanf("%f", &pNewNode->Pro.money);

    printf("请输入项目审批状态:\n");
    scanf("%s", &pNewNode->Pro.state);

    printf("请输入成员性别:\n");
    scanf("%s", pNewNode->Pro.sex);

    printf("请输入成员分工:\n");
    scanf("%s",pNewNode->Pro.works);

    printf("请输入成员年龄:\n");
    scanf("s", pNewNode->Pro.age);

    printf("录入成功!");
    system("pause");
}


void PrintInformation()//定义成员信息函数
{
    printf("-----------------------------------------------------");
    printf("项目编号   |   成员性别   |   成员分工   |   成员年龄");
    printf("-----------------------------------------------------");

    //遍历链表,打印录入结果
    Node* p=g_pHead;
    while(p!=0)
    {
        printf("%s   %d   %s   %s",p->Pro.number,p->Pro.age,p->Pro.works,p->Pro.sex);
        p->pNext;
    }
    system("pause");
}

  • 写回答

1条回答 默认 最新

  • 叶落花枯 2022-11-22 14:05
    关注

    120,输入年龄的scanf里面的%s,漏了个%

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 11月30日
  • 已采纳回答 11月22日
  • 创建了问题 11月22日

悬赏问题

  • ¥50 hyper默认的default switch
  • ¥15 网站打不开,提示502 Bad Gateway
  • ¥20 基于MATLAB的绝热压缩空气储能系统代码咨询
  • ¥15 R语言建立随机森林模型出现的问题
  • ¥20 unity内置语言切换的按钮设置
  • ¥15 中级微观经济学,生产可能性边界问题
  • ¥15 TCP传输时不同网卡传输用时差异过大
  • ¥15 请各位看看我写的属于什么算法,或者有更正确的写法?
  • ¥15 html5 qrcode 扫描器
  • ¥15 爬取网页信息并保存需要完整代码