#include<stdio.h>
int main()
{
int ch;
int count = 0;
while((ch = getchar()) != EOF)
{
if(ch == '{')
{
count++;
}
if(ch == '}'&& count == 0)
{
printf("不匹配!\n");
return 0;
}
if(ch == '}' && count != 0)
{
count --;
}
}
if(count == 0)
{
printf("匹配!\n");
}
else
{
printf("不匹配\n");
}
return 0;
}
运行结果:
输入:{}} 不匹配
输入:{}{{}} ctrl +z enter 匹配!
为什么匹配必须要摁CTRL +z 才能结束,这里牵扯到EOF.
除了表示文件结尾,EOF还可以表示标准输入的结尾。
int c;
while ((c = getchar()) != EOF) {
putchar(c);
}
但是,标准输入与文件不一样,无法事先知道输入的长度,必须手动输入一个字符,表示到达EOF。
Linux中,在新的一行的开头,按下Ctrl-D,就代表EOF(如果在一行的中间按下Ctrl-D,则表示输出”标准输入”的缓存区,所以这时必须按两次Ctrl-D);
Windows中, Ctrl-Z表示EOF。(顺便提一句,Linux中按下Ctrl-Z,表示将该进程中断,在后台挂起,用fg命令可以重新切回到前台;按下Ctrl-C表示终止该进程。)
那么,如果真的想输入Ctrl-D怎么办?这时必须先按下Ctrl-V,然后就可以输入Ctrl-D,系统就不会认为这是EOF信号。Ctrl-V表示按”字面含义”解读下一个输入,要是想按”字面含义”输入Ctrl-V,连续输入两次就行了。