我想用scanf输入成员分工,但含有空格和逗号再回车成员年龄就无法输入了,求解
问题图片:
用%[^\n]和三个scanf分别输入三个成员工作试过,也无法输入成员年龄
代码:
#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();//从键盘获取一个字符,终止while(1)的死循环,并getch()不需要用户输入回车
switch (ch)
{
case'1':
InputInformation();//调用项目编号函数
break;//getch()读取的字符,所以case‘1’需要用单引号,以下同理
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");
}