| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 749 人关注过本帖
标题:求助:在输入字母后会不停的循环,求指点为什么会这样。要了解哪些的知识才 ...
只看楼主 加入收藏
TAAAAB
Rank: 7Rank: 7Rank: 7
来 自:湖南
等 级:黑侠
威 望:1
帖 子:243
专家分:635
注 册:2011-5-29
结帖率:95.24%
收藏
已结贴  问题点数:20 回复次数:12 
求助:在输入字母后会不停的循环,求指点为什么会这样。要了解哪些的知识才能明白?
求助:在输入字母后会不停的循环,求指点为什么会这样。要了解哪些的知识才能明白?
程序代码:
#include<stdio.h>
int main(void)
{
    int a;
    while (scanf("%d", &a), a !=5)
    {
        switch (a)
        {
        case 1: printf("验证为1\n");
            continue;
        case 2: printf("验证为2\n");
            continue;
        case 3: printf("验证为3\n");
            continue;
        case 4: printf("验证为4\n");
            continue;
        default: printf("请输入合适的数字1-5:\n");
        }
    }
    printf("为5时退出\n");
    return(0);
}


搜索更多相关主题的帖子: 知识 字母 
2014-12-10 22:30
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
收藏
得分:4 
这个代码写的好啊

while循环一个知识点
逗号运算符一个知识点
switch分支选择一个知识点
continue结束本次循环进入下一次循环 又是一个知识点

我反正还没有这么成熟的思路

就是少了a非法取值的检查
一但不是输入INT类型 就是死循环了....

Only the Code Tells the Truth             K.I.S.S
2014-12-10 23:03
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2790
专家分:14619
注 册:2014-10-16
收藏
得分:4 
要么scanf不要写在while里面,要么写成while(scanf("%d",&a)!=5);

一片落叶掉进了回忆的流年。
2014-12-11 00:27
八画小子
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:37
帖 子:709
专家分:2063
注 册:2010-11-11
收藏
得分:4 
回复 3楼 诸葛欧阳
写成while(scanf("%d",&a)!=5)就大错特错了
如果输入成功,scaf返回复制的输入项的数目,而不是输入的值
2014-12-11 01:49
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:4 
程序代码:
#include <stdio.h>
int main(void)
{
    int a;
    while( a=0, scanf("%d",&a)!=1 || a!=5 )
    {
        switch( a )
        {
        case 1: printf("验证为1\n");
            continue;
        case 2: printf("验证为2\n");
            continue;
        case 3: printf("验证为3\n");
            continue;
        case 4: printf("验证为4\n");
            continue;
        default: printf("请输入合适的数字1-5:\n");
            scanf( "%*[^\n]" );
        }
    }
    printf("为5时退出\n");
    return 0;
}
2014-12-11 08:37
yahwei
Rank: 7Rank: 7Rank: 7
来 自:湖~
等 级:黑侠
威 望:3
帖 子:145
专家分:644
注 册:2011-11-10
收藏
得分:4 
要学会自己调试啊,程序不停的循环,肯定是因为循环条件恒满足,它才会陷入死循环嘛……

[qq]949654600[/qq]
2014-12-11 09:57
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:4 
回复 2楼 longwu9t
这个其实是坏代码

授人以渔,不授人以鱼。
2014-12-11 11:16
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
收藏
得分:0 
回复 7楼 TonyDeng
呵 我发言时一般是不带标点 而且不想说伤人话

不过 我可以写个更坏的
程序代码:
#include <stdio.h>

void clearInput(void) {
    char input[1000];
    fgets(input, 1000, stdin);
}

int main(void) {
    int a, flag;
L:
    printf("请输入合适的数字1-5...(5为退出):\n");
    flag = scanf("%d", &a);

    if(!flag) {
        clearInput();
        printf("输入值的类型不合法...\n");
        goto L;

    } else if(a >= 1 && a <= 5) {
        clearInput();
        switch(a) {
            case 1:
                printf("验证为1\n");
                goto L;

            case 2:
                printf("验证为2\n");
                goto L;

            case 3:
                printf("验证为3\n");
                goto L;

            case 4:
                printf("验证为4\n");
                goto L;

            case 5:
                printf("为5时退出\n");
                break;
        }

    } else {
        clearInput();
        printf("输入值不在验证范围内...\n");
        goto L;
    }

    return 0;
}

Only the Code Tells the Truth             K.I.S.S
2014-12-11 15:10
TAAAAB
Rank: 7Rank: 7Rank: 7
来 自:湖南
等 级:黑侠
威 望:1
帖 子:243
专家分:635
注 册:2011-5-29
收藏
得分:0 
谢谢各位。总结了一下,我想问的应该是当输入字符时,计算机内部在做什么,为什么会一直循环。先不纠结了,自己先继续往下学吧,

人有多懒,编程就有多难。
2014-12-11 19:24
yahwei
Rank: 7Rank: 7Rank: 7
来 自:湖~
等 级:黑侠
威 望:3
帖 子:145
专家分:644
注 册:2011-11-10
收藏
得分:0 
回复 9楼 TAAAAB
唉,既然说了不听,那只好解释一下呗,要不然愧对你给的4分啊:
while( scanf( "%d", &a ) , a != 5 );

首先,你要知道“,”逗号运算符的作用是只取最右边的表达式的值,其它表达式的值是计算过后就会丢弃的,所以只要 a != 5 这个条件满足,循环条件就成立了。
然后,又因为你的scanf()里是用的 %d 格式符,所以它只会获取数字,碰到其它的字符它并不会读取出来。比如,你输入a,那么scanf()不会读取这个字符,它的返回值为0,而这个字符a仍然在输入缓冲区里,循环每次判断条件的时候因为输入缓冲区里已经有字符了,所以它并不会停下来等待你的输入。所以它总是会返回0,而 a != 5 这个条件将一直成立,SO……
后面的你明白啦……
如果你想验证一下,那就加入一个读取字符的代码,然后输出它:
程序代码:
#include<stdio.h>
int main(void)
{
    int a,b;
    while (scanf("%d", &a), a !=5)
    {
        b = getchar();
        putchar(b);
        switch (a)
        {
        case 1: printf("验证为1\n");
            continue;
        case 2: printf("验证为2\n");
            continue;
        case 3: printf("验证为3\n");
            continue;
        case 4: printf("验证为4\n");
            continue;
        default: printf("请输入合适的数字1-5:\n");
        }
    }
    printf("为5时退出\n");
    return(0);
}

[qq]949654600[/qq]
2014-12-12 09:46
快速回复:求助:在输入字母后会不停的循环,求指点为什么会这样。要了解哪些的知 ...
数据加载中...
 
   



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

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