澄清需要关于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');