我在C上读取字符时出错

我在C上读取字符时出错,c,C,我想从控制台读取单个字符,但当我这样做时,程序仍会读取字符,我必须编写另一个字符来保存第一个字符并完成其执行 代码: 有人能解释它为什么会这样做以及如何更正此错误吗?如果您从scanf中删除\n,它应该可以正常工作 我知道 scanf(" %c", &peps); 而不是 scanf(" %c\n", &peps); 这是因为scanf格式字符串中的\n告诉计算机读取并忽略所有空白,包括读取字符后的空白 因此,所有空格(包括键入enter键所给出的换行符)都将被忽略。只有在遇

我想从控制台读取单个字符,但当我这样做时,程序仍会读取字符,我必须编写另一个字符来保存第一个字符并完成其执行

代码:

有人能解释它为什么会这样做以及如何更正此错误吗?

如果您从scanf中删除\n,它应该可以正常工作

我知道

scanf(" %c", &peps);
而不是

scanf(" %c\n", &peps);
这是因为scanf格式字符串中的\n告诉计算机读取并忽略所有空白,包括读取字符后的空白

因此,所有空格(包括键入enter键所给出的换行符)都将被忽略。只有在遇到非空白字符时才会停止,该字符不会被读取,因此会保留在输入缓冲区中

因此,在您的例子中,首先读取一个字符,然后等待一个非空白字符,然后在scanf之后执行printf。非空白字符将保留在输入缓冲区中,未被读取,因此不会立即打印。只有在再次从stdin读取时才会读取

如果您想进一步探索,请考虑将SCANF和PrTNF放置在一个循环中并检查输出。

请注意,用空格替换\n将产生相同的效果

会有同样的行为


实际的错误是什么?我向程序中写入一个字符,程序在读取另一个字符之前不会保存。也就是说,我写j并按enter键,但即使我写了j,程序仍在等待字符。请立即删除scanfIt works中的\n!哈哈,直到你告诉我,我才发现错误。谢谢:D@EmmanCanVaz_95看一看,哇!这是一个伟大而有用的答案!谢谢你帮我解决我的小问题:D。
scanf(" %c\n", &peps);
scanf(" %c\n", &peps);
scanf(" %c ", &peps);