在C语言中读取单个字符

在C语言中读取单个字符,c,scanf,C,Scanf,我试图从控制台读取一个字符(在while循环中)。但它读了不止一次 输入: a 输出: char : a char : char : ' 代码: 我怎么能只读“a” scanf("%c",&in); 留下一个换行符,该换行符将在下一次迭代中使用 将其更改为: scanf(" %c",&in); // Notice the whitespace in the format string 它告诉scanf忽略空白 或 要仅读取一个字符,请改用: 你可以这样做 char *a

我试图从控制台读取一个字符(在while循环中)。但它读了不止一次

输入:

a
输出:

char : a  char : char : '
代码:

我怎么能只读“a”

scanf("%c",&in);
留下一个换行符,该换行符将在下一次迭代中使用

将其更改为:

scanf(" %c",&in); // Notice the whitespace in the format string
它告诉scanf忽略空白


要仅读取一个字符,请改用:

你可以这样做

char *ar;
int i=0;
char c;
while((c=getchar()!=EOF)
   ar[i++]=c;
ar[i]='\0';
通过这种方式,您创建了一个字符串,但实际上它是一个字符数组。

scanf(“%c”,&in)中
您可以在
%c
之后添加换行符
\n
,以吸收多余的字符

scanf("%c\n",&in);

您可以始终使用
char a=fgetc(stdin)。非常规的,但工作原理就像
getchar()

实际上我想创建一个char数组。你有什么想法吗?(输入大小不确定)。谢谢@vkeles:1)使用
malloc
2)读取数组中的字符,直到它不超过
n
3)如果读取了
n
字符,并且希望使用
realloc
读取数组大小的两倍以上,则分配一个具有一些初始大小的数组。通常遵循此方法以避免过于频繁地调用realloc。否则,您可以使用您喜欢的大小执行realloc。请注意,此示例没有为字符数组分配任何内存,也没有设置ar的初始值,因此它将写入内存中有效的随机位置,覆盖内存中的任何内容。谢谢。我真的忘了保持初始化指针变量的习惯
int c = getchar();
if (c != EOF)
  printf("%c\n", c);
char *ar;
int i=0;
char c;
while((c=getchar()!=EOF)
   ar[i++]=c;
ar[i]='\0';
scanf("%c\n",&in);