2012-09-22 49 views
2

我对使用getchar()读取用户输入的字符有疑问。需要关于getchar()和换行符的说明

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

我需要得到2字符作为来自用户的输入。在这种情况下,如果用户输入字符'A',然后输入newline,然后输入字符'B',那么将存储在char2中 - 将是换行符还是字符'B'

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

我只想知道预期的行为是什么,以及它是否依赖于编译器?如果是这样,turbo C和mW会有什么不同?

回答

4

是的,你必须每个输入后消耗换行符:

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

这不是编译器相关。对于所有平台都是如此,因为每条输入行末尾都会有回车符(虽然实际换行符可能因平台而异)。

0

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

这是预期的行为,而不是编译器相关的。

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

0

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

ch1=getchar(); 

fflush(stdin); 
ch2=getchar(); 
+3

根据C标准,输入流上的fflush()是未定义的行为。它适用于Windows,至少在Visual Studio中,但应该避免使用,因为它是非标准的。 –

0

可以防止它明确地测试阅读换行。 而不是简单地使用

getchar(): 

你可以使用这样的事情

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

如果你对你可能想测试“\ r”太多的窗口。所以代码稍作修改。

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