5

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

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

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

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

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

4

4 回答 4

10

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

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

这不依赖于编译器。这适用于所有平台,因为每个输入行的末尾都会有回车(尽管实际换行可能因平台而异)。

于 2012-09-22T13:19:35.127 回答
0

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

这是预期的行为,与编译器无关。

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

于 2012-09-22T13:18:42.777 回答
0

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

getchar():

你可以使用这样的东西

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

如果您在 Windows 上,您可能还想测试 '\r' 。所以代码稍作改动。

while((char1 = getchar()) == '\n' || char1 == '\r');
于 2012-09-22T15:55:05.923 回答
-2

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

ch1=getchar();

fflush(stdin);
ch2=getchar();
于 2012-09-22T13:43:58.903 回答