| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1261 人关注过本帖
标题:如何让while语句停下来。。我停不下来 求解答呀
只看楼主 加入收藏
可爱的啊四哟
Rank: 1
等 级:新手上路
帖 子:24
专家分:2
注 册:2012-10-23
结帖率:66.67%
收藏
已结贴  问题点数:20 回复次数:10 
如何让while语句停下来。。我停不下来 求解答呀
#include<stdio.h>
main()
{
    int i,j,n,s=1,a;
    while(scanf("%d",&n) != EOF)
    {
        for(i=0;i<n;i++)
        {
            scanf("%d",&a);
            for(j=0;j<a;j++)
            {
                s=s*a;
            }
            s=s-(s/10*10);
            printf("%d\n",s);
            s=1;
        }
        n=0;
    }
}
搜索更多相关主题的帖子: 如何 
2013-02-14 17:08
可爱的啊四哟
Rank: 1
等 级:新手上路
帖 子:24
专家分:2
注 册:2012-10-23
收藏
得分:0 
2013-02-14 17:11
心灯甚亮
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:441
专家分:996
注 册:2013-1-29
收藏
得分:3 
windows下ctrl+Z
2013-02-14 19:12
洫魇
Rank: 2
等 级:论坛游民
帖 子:46
专家分:34
注 册:2013-2-5
收藏
得分:3 
scanf函数的传回值是成功读入的字符个数,而EOF常量的值为 -1,EOF是文件结尾的字符值.
scanf函数传回值只有在输入错误的情况才会传回 -1,所以在 :
while(scanf("%d",&n) != EOF)
    {
        for(i=0;i<n;i++)
        {
            scanf("%d",&a);
            for(j=0;j<a;j++)
            {
                s=s*a;
            }
            s=s-(s/10*10);
            printf("%d\n",s);
            s=1;
        }
中,一直在while循环中.
希望对你有帮助O(∩_∩)O.

一切,都在输给时间.
2013-02-14 19:17
洫魇
Rank: 2
等 级:论坛游民
帖 子:46
专家分:34
注 册:2013-2-5
收藏
得分:0 
以下是引用心灯甚亮在2013-2-14 19:12:45的发言:

windows下ctrl+Z
这个方法应该也行得通.

一切,都在输给时间.
2013-02-14 19:17
心灯甚亮
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:441
专家分:996
注 册:2013-1-29
收藏
得分:0 
windows下ctrl+Z使得scanf返回EOF
不同系统对EOF有不同的按键方式
2013-02-14 19:40
果沫
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:198
专家分:960
注 册:2013-1-30
收藏
得分:3 
这是让你一直输入整数,直到你输入CTRL+Z后按回车才会结束WHILE循环
2013-02-14 21:22
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:3 
停电就停下来了

授人以渔,不授人以鱼。
2013-02-14 21:39
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
写程序的人,要学会站在用户的角度思考,不要你自己写出用scan()!=EOF来判断输入结束,就以为用户也懂按那些组合键,甚至以为用户不会给出非法数据,你的程序不能处理非法的操作,死循环就很正常了。scanf()!=EOF,只有在输入遇到结束符的时候才会返回EOF,但用户可能键入字母而非数字键(键盘上还有很多你想都没想过的各种按键可能被输入进来),此时scanf()无法把输入转化为数值,但又不返回EOF(此时返回的是0,而EOF是-1,仅仅判断-1是不够的),而非法的输入流仍然保留在输入缓冲区中无法清除,怎么不死循环!这种现象取决于用户的操作是怎样的,而不是你的代码是怎样的。

scanf()的返回值,是返回成功处理的数据项数,scanf("%d", &n),只请求读入1项整数,假如读入成功,函数将返回1,只要不是1,就是遇到错误或非法输入了,这个时候就要考虑中断循环并清空输入缓冲区,否则那些不能处理的数据仍然会留在那里堵塞程序流程。

[ 本帖最后由 TonyDeng 于 2013-2-14 22:20 编辑 ]

授人以渔,不授人以鱼。
2013-02-14 22:15
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:3 
以下是引用TonyDeng在2013-2-14 22:15:15的发言:

写程序的人,要学会站在用户的角度思考,不要你自己写出用scan()!=EOF来判断输入结束,就以为用户也懂按那些组合键,甚至以为用户不会给出非法数据,你的程序不能处理非法的操作,死循环就很正常了。scanf()!=EOF,只有在输入遇到结束符的时候才会返回EOF,但用户可能键入字母而非数字键(键盘上还有很多你想都没想过的各种按键可能被输入进来),此时scanf()无法把输入转化为数值,但又不返回EOF(此时返回的是0,而EOF是-1,仅仅判断-1是不够的),而非法的输入流仍然保留在输入缓冲区中无法清除,怎么不死循环!这种现象取决于用户的操作是怎样的,而不是你的代码是怎样的。

scanf()的返回值,是返回成功处理的数据项数,scanf("%d", &n),只请求读入1项整数,假如读入成功,函数将返回1,只要不是1,就是遇到错误或非法输入了,这个时候就要考虑中断循环并清空输入缓冲区,否则那些不能处理的数据仍然会留在那里堵塞程序流程。
大牛说得好
2013-02-14 22:34
快速回复:如何让while语句停下来。。我停不下来 求解答呀
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.031550 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved