澄清需要关于getchar()和换行符

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

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

我需要从用户input2字符。 在这种情况下,如果用户input字符'A'后跟一个newline ,然后input字符'B' ,那么存储在char2将是换行符还是字符'B'

我在Windows上的CodeBlocks上试过,而char2实际上存储了换行符,但是我打算存储字符'B'

我只想知道预期的行为是什么,是否依赖于编译器? 如果是这样,涡轮C和鸣响之间有什么区别呢?

是的,你必须在每次input之后使用换行符:

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

这不依赖于编译器。 对于所有平台来说都是如此,因为每个input行末尾都会有回车符(虽然实际的换行符可能在不同的平台上有所不同)。

我只想知道预期的行为是什么,是否依赖于编译器依赖?

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

您可以使用scanf来读取A,其次是换行符,然后是B,然后是换行符。 如果你想坚持getchar() ,那么简单地把input作为AB

添加语句fflush(stdin); 在陈述之间。 看这一个

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

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

 getchar(): 

你可以使用这样的东西

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

如果你在Windows上,你可能也想testing'\ r'。 所以代码改变了一点。

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