需要澄清 getchar() 和换行符
Clarification needed regarding getchar() and newline
我对使用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();
相关文章:
- 如何防止clang格式在流运算符调用之间添加换行符<<
- C/C++ - 查询平台相关的换行符(用于内存映射文件)
- 在 Stream C++ 文本之前有一个额外的换行符
- 流:CSV 文件中的换行符
- 如何在三元条件运算符中添加换行符和连接? :在 C++ 中
- Clang-格式:在多行语句之后的换行符上打开大括号
- 在输出流中插入换行符
- 防止控制台在通道字符(在 c++ 中)中输入空格(即空格、制表符和换行符)
- QProcess::readAllStandardOutput() 和换行符
- 如果有换行符,clang 格式不会附加大括号
- 提取后返回换行符的C++istream.get()
- 如何在出现换行符之前将多个整数作为输入?
- 正则表达式 获取两个换行符之间的文本
- 包含换行符分隔的单词的文件和C++中这些单词的字符串向量的大小是否相同?
- 在字符串中输入换行符
- 从文本文件中读取数据并删除所有换行符空格,并在 C++ 控制台中显示
- 使用 fgets() 从键盘读取时从以前的输入读取换行符
- C++ 换行符上的合并排序错误中断
- 需要澄清 getchar() 和换行符
- 使用 getchar() 输入字符的最有效方法,就像 cin 中没有换行符和空格字符一样C++