syetem("pause")与getchar()在解决闪退问题时的区别

这是最近练习写代码时的一个程序:

#include<stdio.h>

#includ<stdlib.h>

int main()

{
    int max(int x,int y);
int a, b, c;

printf("输入 a,b\n");
scanf("%d,%d", &a, &b);
c = max(a, b);
printf("%d", c);
//getchar();
system("pause");
return 0;
}

int max(int x, int y)
   
{ int z;
z = x > y ? x : y;
//getchar();
return (z);

}

程序很简单,即使是作为初学者也很容易就看懂了,在vs 2013平台上运行程序会出现闪退的问题,很多文章中都有提到使用system("pause")和getchar()可以解决这个问题,但今天在调试这个程序的时候发现使用两者的结果不同,在主函数返回前加入system("pause")程序如预期的那样运行,没有问题,而使用getcher()时程序不能如期执行,只能执行到一半,无法输出我要求的c值。查看system("pause")和getchaer()的具体含义,字面理解似乎作用一样,那么为什么使用getcher()无法是程序如期执行。我尝试了多种方法改写程序,后来发现在定义的函数max中,在return(z)语句前加一条getchar()程序就能如期运行,那么原因是什么呢?

在CSDN和百度上查阅,并和同学讨论了半天,最后知道是缓冲字符的问题,getchar()会在接收键盘缓冲中留下字符,在这个程序中,输入a和b的值后按回车键,回车键就作为了缓冲字符,getchar()接收到这个字符就自动向下执行,程序自动闪退了,而在max函数中加入getchar()后,就有两条getchar(),接收回车字符值后又遇到gechar(),系统等待字符输入才能向下执行,自然就不会闪退了。

  回头来看看似乎并不难理解,只是之前对getchar()使用不够熟练。

  而system("pause")的作用相当于“print any kit to continue”,解决了缓冲字符的问题。

  本文都是自己的见解,若有不妥,欢迎指导大笑

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值