【C语言练习题】编写一个程序,它从标准输入读取C源代码,并验证所有花括号都正确成对出现

举报
王建峰 发表于 2021/11/19 03:24:55 2021/11/19
【摘要】 《C和指针》课后练习题   问:编写一个程序,它从标准输入读取C源代码,并验证所有花括号都正确成对出现。   代码 思路:在while循环条件中读取我输入的字符,只有当输入缓冲区没有数据或者我这里产生回车符'\n'时,才会判断条件不成立。counter这个变量用来标记'{ }'是否成对出现(当有'...

《C和指针》课后练习题

 

问:编写一个程序,它从标准输入读取C源代码,并验证所有花括号都正确成对出现。

 

代码

思路:在while循环条件中读取我输入的字符,只有当输入缓冲区没有数据或者我这里产生回车符'\n'时,才会判断条件不成立。counter这个变量用来标记'{ }'是否成对出现(当有'{'读入时,counter++,当有'}'读入时,counter--)。另外,'}'为了和前面的'{'完成配对,和最前面未配对的'{'相互匹配,这时候counter不可能是负数。最后当用户输入结束时(按下回车键),程序也根据counter是否为0,来判断花括号是否成对出现了。


  
  1. #include <stdio.h>
  2. #include <string.h>
  3. int main(void)
  4. {
  5.         int ch;
  6.         int counter=0;
  7.         printf(">>");
  8.         while( (ch = getchar()) != EOF && ch != '\n')
  9.         {
  10.                 if('{' == ch)
  11.                 {
  12.                         counter++;
  13.                 }
  14.                 else if('}' == ch)
  15.                 {
  16.                         counter--;
  17.                 }
  18.                 if ( counter < 0 )
  19.                 {
  20.                         printf("input error\n");
  21.                         return -1;
  22.                 }
  23.         }
  24.         if ( 0 == counter )
  25.         {
  26.                 printf("success!\n");
  27.         }
  28.         else
  29.         {
  30.                 printf("failed!\n");
  31.         }
  32.         return 0;
  33. }

 

实验结果

 

 

关于行缓冲

这里遇到一个小插曲

本来以为当我输入 '}' 的时候,在程序中会立即判断执行 return ,然后退出程序。但是事实是,在我按下回车符'\n'时,才有结果显示。 

导致这种结果的原因呢,就是这个getchar函数了。

意思是,我通过按键输入的字符数据不会立即被getchar这个函数处理,先存储到一个缓冲区中。当我按下回车符'\n'后,函数getcahr再从缓冲区中一个一个读取字符,这就是行缓冲机制。总的来说这个过程是在我回车之后进行的。

文章来源: blog.csdn.net,作者:hinzer,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/feit2417/article/details/85127486

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。