14

我正在尝试从控制台读取一个字符(在 while 循环内)。但它不止一次阅读。

输入:

a

输出:

char : a  char : char : '

代码:

while(..)
{
    char in;
    scanf("%c",&in);
}

我怎样才能只读“a”?

4

5 回答 5

37
scanf("%c",&in);

留下一个换行符,在下一次迭代中使用。

将其更改为:

scanf(" %c",&in); // Notice the whitespace in the format string

它告诉 scanf 忽略空格。

或者

scanf(" %c",&in);
getchar(); // To consume the newline 
于 2013-01-19T23:20:20.917 回答
6

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

int c = getchar();
if (c != EOF)
  printf("%c\n", c);
于 2013-01-19T23:29:29.000 回答
3

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

scanf("%c\n",&in);
于 2013-01-20T09:15:12.673 回答
0

你总是可以使用char a = fgetc (stdin);. 非常规,但就像getchar().

于 2020-01-04T09:16:43.647 回答
-1

你可以这样做。

char *ar;
int i=0;
char c;
while((c=getchar()!=EOF)
   ar[i++]=c;
ar[i]='\0';

这样,您创建了一个字符串,但实际上它是一个 char 数组。

于 2013-01-20T03:02:40.597 回答