在ubuntu中用c语言输入单字符

时间:2016-06-26 19:52:29

标签: c

我刚看到这个:

#include <stdio. h>

int main() 
{
 char fname,sname;
 printf("your first name?: ");
 flushall();
 scanf("%c", &fname);
 printf("your last name?: "); 
 scanf("%c", &sname);
 printf("initials: %c.   %c",fname,sname);

return 0;
} 

问题是我得到了printf语句而m无法输入任何内容。

它只是跳过输入部分......

P.S。:我使用的是ubuntu 15.10并使用了fflush(stdin)fpurge(),但都没有。

2 个答案:

答案 0 :(得分:0)

这段代码效果很好。我认为,在第二次扫描之后,其他字符需要额外空间(比如换行符) 第二次扫描应该是这样的 - &gt;&gt; scanf(" %c",&sname) 并且我认为flushall不是必要的

#include <stdio.h>

int main() 
{
 char fname,sname;
 printf("your first name?: ");
 scanf("%c", &fname);
 printf("your last name?: "); 
 scanf(" %c", &sname);
 printf("initials: %c.   %c",fname,sname);

return 0;
} 

答案 1 :(得分:0)

我正在使用Ubuntu 16.04。

首先,添加stdio_ext.h以使用__fpurge();

在每scanf()之前,执行_fpurge(stdin)

它对我来说很好。

您对{strong> 使用__fpurge()没有任何信息。这就是为什么我给你一个答案,告诉你再次尝试__fpurge()。 x)的

#include <stdio.h>
#include <stdio_ext.h>
int main() 
{
 char fname,sname;
 printf("your first name?: ");
 __fpurge(stdin);
 scanf("%c", &fname);
 printf("your last name?: "); 
 __fpurge(stdin);
 scanf("%c", &sname);
 printf("initials: %c.   %c",fname,sname);

return 0;
}