【发布时间】:2018-07-01 15:37:00
【问题描述】:
#include <stdio.h>
int main()
{
int c;
while ( (c = getchar()) != EOF )
{
if (c >= 65 && c <= 90)
c += 32;
else if (c >= 97 &&c <= 122)
c -= 32;
putchar(c);
}
return 0;
}
在代码中如何解释、处理和打印输入?
例如,如果我们输入abcde,我们会得到输出ABCDE。由于我们正在逐个字符地处理输入,我们应该逐个字符地获取输出,但是一旦我们按下回车键就会得到输出。直到我们按下回车,输出存储在哪里。
【问题讨论】:
-
终端一般会缓冲文本,直到你按下“回车”,此时终端将输入发送给程序。
-
使用
islower()、isupper()、tolower()、toupper()。不要对字符集做出不可移植的假设。 -
试试这个:
for i in {1..10}; do echo $i; done | ./yourExecutable。你明白它是如何一张一张打印出来的吗?每次迭代时,“for”命令都会简单地刷新缓冲区。现在尝试编写一个 C 程序,每 3 个字符刷新一次输出流并将其输出通过管道传输到您的程序。看看它是如何运作的。如果还没有,那就有意义了 -
直到你按下回车键,没有输入,所以没有输出可以存储在任何地方。
-
这是一段可读性差的代码,最好用
if (c >= 'A' && c <= 'Z') ...; else if (c >= 'a' && c <= 'z') ...编写(或者干脆使用ctype.h转换)除非你想使用@,否则你只能使用32或0x20987654334@(不利于可读性)。