需要澄清 getchar() 和换行符

Clarification needed regarding getchar() and newline

本文关键字:换行符 getchar      更新时间:2023-10-16

我对使用getchar()从用户读取字符输入有疑问。

char char1, char2;
char1 = getchar();
char2 = getchar();

我需要从用户那里获取2个字符作为输入。在这种情况下,如果用户输入字符'A'后跟一个newline,然后输入字符'B'char2中将存储什么 - 是换行符还是字符'B'

我在Windows上的CodeBlocks上尝试了它,char2实际上存储了换行符,但我打算将其存储在'B'字符。

我只想知道预期的行为是什么,以及它是否依赖于编译器?如果是这样,涡轮增压C和mingW之间有什么区别?

是的,您必须在每次输入后使用换行符:

char1 = getchar();
getchar(); // To consume `n`
char2 = getchar();
getchar(); // To consume `n`

这与编译器无关。所有平台都是如此,因为每个输入行的末尾都会有回车符(尽管实际换行可能因平台而异)。

我只想知道预期的行为是什么,以及它是否取决于编译器依赖性?

这是预期的行为,不依赖于编译器。

您可以使用 scanf 读取 A 后跟换行符,然后读取 B 后跟换行符。如果你想坚持getchar(),那么只需将输入作为AB

您可以通过显式测试来阻止读取换行符。而不是简单地使用

getchar():

你可以使用这样的东西

while((char1 = getchar()) == 'n');

如果你在Windows上,你可能也想测试'\r'。所以代码略有变化。

while((char1 = getchar()) == 'n' || char1 == 'r');

语句之间添加语句fflush(stdin);。看看这个

ch1=getchar();
fflush(stdin);
ch2=getchar();