| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 811 人关注过本帖
标题:纠结了很久的一个程序问题,求解~~
只看楼主 加入收藏
翼碎
Rank: 1
等 级:新手上路
帖 子:23
专家分:7
注 册:2012-9-5
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:10 
纠结了很久的一个程序问题,求解~~
题目是:循环的从键盘输入一个字符,若为数字字符则输出digit,否则输出char(用字符#作为结束输入的标志)

下面是我第一次写好的程序,后来不论怎么调试,无论是getchar,还是scanf,就连数组都被我试过,但是每个输入之后的输出总会多出来一个char,是不是因为回车的问题啊,怎么解决啊?求解答啊,谢谢大家了O(∩_∩)O!

#include<stdio.h>

main()
{
    char c;
    c = getchar();

    while(c != '#')
    {
        if(c >= '0' && c <= '9')printf("digit\n");
        else printf("char\n");

        c = getchar();
    }

}
搜索更多相关主题的帖子: 键盘 
2012-09-05 21:48
小习小习
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:6
帖 子:1467
专家分:4792
注 册:2012-7-2
收藏
得分:2 
因为在循环体中c=getchar()把回车\n附进去了,所以会输出char

实现自己既定的目标,必须能耐得住寂寞单干。
2012-09-05 22:00
翼碎
Rank: 1
等 级:新手上路
帖 子:23
专家分:7
注 册:2012-9-5
收藏
得分:0 
回复 2楼 小习小习
但是把c=getchar()换成scanf("%c",&c);结果还是一样的呀,而且如果只进行一次输入,把循环去掉的话都是可以的
2012-09-05 22:06
lushiliangkl
Rank: 1
等 级:新手上路
帖 子:1
专家分:2
注 册:2011-11-15
收藏
得分:2 
#include<stdio.h>

main()
{
    char c;
    c = getchar();
    while(c != '#')
    {
        if((c >= '0') && (c <= '9'))printf("digit\n");
        else if(c==10) printf("dt\n");
        else   printf("char\n");

        c = getchar();
    }

}
我在while循环里面又加了一条显示语句“else if(c==10)”,其中 c==10.这个10是回车键的ascii 码。你把上面的程序复制下来试试,就知道为什么了。
2012-09-05 22:25
justNPC
Rank: 5Rank: 5
等 级:职业侠客
帖 子:101
专家分:311
注 册:2012-8-11
收藏
得分:5 
程序代码:
#include<stdio.h>
int main()

 {
     char c;
     c = getchar();
     while(c != '#')
     {
         if(c=='\n')
             ;
         else if(c >= '0' && c <= '9')
             printf("digit\n");
         else
             printf("char\n");
         c = getchar();
     }
     return 0;

 }

原因正如一楼所说,我稍微修改了一下你的代码,
已经符合要求   你课以参考一下
2012-09-05 22:31
姻脂梦
Rank: 6Rank: 6
等 级:侠之大者
帖 子:264
专家分:424
注 册:2012-7-3
收藏
得分:1 
同上,要剔除回车符
2012-09-05 22:45
小习小习
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:6
帖 子:1467
专家分:4792
注 册:2012-7-2
收藏
得分:0 
回复 楼主 翼碎
二楼我已经说了,在你输入字符时,输入流会把\n也存入了,在循环体中c=getchar()把\n接收,所以会在循环一次。这是我的理解。。

实现自己既定的目标,必须能耐得住寂寞单干。
2012-09-05 23:25
雪狼MJ
Rank: 8Rank: 8
来 自:甘肃
等 级:蝙蝠侠
威 望:4
帖 子:267
专家分:853
注 册:2012-5-27
收藏
得分:8 
    我不理解楼主说的多一个char是什么情况,但我调试了,无论输入多少个字符,只要你的结尾是#符号,它都是正确的!然后多次调试的过程中,手误,没有输入#就按了回车键,结果出现了个多余的char,之所以出现多余的char,是应为程序也接受了\n为一个字符,就如楼上所说,将getchar改为scanf,但有一个问题,就是scanf函数在输入数字时,会跳过空白符,而在读字符时,却不会跳过,这时,为了强制scanf函数在读入字符时跳过空白符,需要在格式转换说明%c前加个空格,就好了,代码如下:

#include<stdio.h>

int main(void)
{
    char c;
   
    c=getchar();
   
    while(c != '#'){  
   
        if(c >= '0' && c <= '9') printf("digit\n");
        
        else printf("char\n");
        
           scanf(" %c", &c);
    }
   
    return 0;
}
支持船长吧,亲!

Edsger Dijkstra:算法+数据结构=程序
2012-09-06 07:26
zhaojigao
Rank: 2
等 级:论坛游民
威 望:1
帖 子:19
专家分:59
注 册:2012-9-6
收藏
得分:2 
我也试过了!就是前面所说的回车的问题!我用C++写的代码就可以了:
#include<stdio.h>
#include<iostream>
using namespace std;
 
int main()
 {
     char c(0);
    while(c != '#')
     {
         cin>>c;
         if('0'<= c && c <= '9')
         {
             printf("digit\n");
            

         }
         else
         {
             printf("char\n");
         }
 
        
     }
 return 0;
}
2012-09-06 20:27
翼碎
Rank: 1
等 级:新手上路
帖 子:23
专家分:7
注 册:2012-9-5
收藏
得分:0 
回复 8楼 雪狼MJ
真的可以诶,第一次知道这种写法,谢谢啦
2012-09-06 21:46
快速回复:纠结了很久的一个程序问题,求解~~
数据加载中...
 
   



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

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