首页 > 解决方案 > 奇怪的扫描行为

问题描述

所以我完全是 C 的新手。当我遇到非常奇怪的 scanf 行为时,我将开始使用链表。

带有 empname 的 scanf 工作正常。它一直接受输入,直到遇到换行符。

但是,在按 Enter(提供员工姓名后)时,我无法输入员工职业。

并且,例如,我输入 10000 作为员工工资并按 Enter,直到我输入一个随机字符(输入 10000 并按 Enter)并按 Enter 后才会执行 printf 语句。

我尝试针对员工职业只写“%s”而不是“%[^\n]s”,但我面临与第三种情况相同的问题。

在下面附上我的代码以供参考

任何帮助将非常感激!谢谢!

struct empdetails
{
    int empid ;
    char * empname ;
    char * profession ;
    int salary;
};

typedef struct empdetails empdet ;
empdet emp1 ;
empdet * emp2 ;

emp1.empid=1 ;

emp1.empname=(char *)malloc(50*sizeof(char)) ;
printf("Enter employee name:") ;
scanf("%[^\n]s\n", emp1.empname) ;

emp1.profession=(char *)malloc(50*sizeof(char)) ;
printf("Enter employee profession:") ;
scanf("%[^\n]s\n", emp1.profession) ;

printf("Enter employee salary:") ;
scanf("%d\n", &emp1.salary) ;

printf("EMPID:%d  EMPNAME:%s  PROFESSION:%s  SALARY:%d", emp1.empid, emp1.empname, emp1.profession, emp1.salary) ;

free (emp1.empname);
free (emp1.profession);

标签: c

解决方案


推荐阅读