C语言程序使用while和scanf时产生了闪退

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言程序使用while和scanf时产生了闪退相关的知识,希望对你有一定的参考价值。

/*summing.c -- 对用户输入的整数求和*/ #include<stdio.h> int main(void) long num; long sum = 0L; //把sum初始化为0 int status; printf("Please enter an integer to be summed. "); printf("(q to quit):"); ... /*summing.c -- 对用户输入的整数求和*/ #include<stdio.h> int main(void) long num; long sum = 0L; //把sum初始化为0 int status; printf("Please enter an integer to be summed. "); printf("(q to quit):"); status = scanf("%ld",&num); while(status == 1) sum = sum + num; printf("Please enter next integer (q to quit):"); status = scanf("%ld",&num); printf("Those integers sum to %ld. \n",sum); getchar(); return 0; printf("Those integers sum to %ld. \n",sum);前的程序运行是正常的,当输入非数字值(如q)时,程序会出现闪退,不能打印最后的总数。 也就是说 printf("Those integers sum to %ld. \n",sum);没能及时显示就退出了。 补充: 当把最后一部分改为 getchar(); printf("Those integers sum to %ld. \n",sum); getchar(); getchar(); return 0; 程序能正常显示,能否解释一下这是什么样的情况呢???? 展开

参考技术A 肯定还是输入缓冲区里有你上次输入留下的回车,
然后被getchar获取到了.
因为getchar获取到了回车,
所以立即返回.
这就是缓冲区有关的问题.
不用在乎它,
可以用flushall()来清空缓冲区.

c语言 while(scanf("%d", &num) == 1) 起啥作用

尤其是 == 1 干嘛用的

1、scanf()是格式输入函数,它的返回值是已经正确输入变量的个数,如返回值为1,代表已经输入了一个变量,但它的返回值一般不用。
2、==是c语言中逻辑运算符"相等"的符号,scanf("%d", &sum) == 1表示scanf函数的返回值为1。
3、while(scanf("%d", &sum) == 1) 是整句话的意思是当变量sum输入成功时,进行或继续循环。
参考技术A while(scanf("%d", &num) == 1)
这句的作用呢,其实就是判断你从终端输入的数字:num是不是符合进入循环体的条件。
这个条件是这样的,因为scanf的返回值是int类型,当你正确输入了num之后,scanf的返回值就是1,此时1==1,进入while循环。所以这个1的作用就是判断你是否正确输入参数num的值。
参考技术B while(scanf("%d", &num)==1)
等待输入一个整型数,当成功读入这个整型数后,scanf会返回1,进入while循环体。

以上是关于C语言程序使用while和scanf时产生了闪退的主要内容,如果未能解决你的问题,请参考以下文章

使用 scanf 读取时产生总线错误的程序 - C 程序

C语言中while语句里使用scanf的技巧

C语言while(scanf("%d",&num)==1);语句的一个问题

c语言 while(scanf("%d", &num) == 1) 起啥作用

C语言scanf函数的返回值scanf函数的安全版在while条件中使用scanf函数

mysql5.1 command line client 登录时出现闪退