鱼C论坛

 找回密码
 立即注册
查看: 3175|回复: 11

代码不长,大神进来帮帮忙。别老说我是作业题 我是新手。

[复制链接]
发表于 2013-8-21 17:22:18 | 显示全部楼层 |阅读模式
1鱼币
#include"stdio.h"
#include <conio.h>
#pragma warning (disable:4996)
void main()//软件用于分别统计输入的数字 字母及其其他字符的个数,问题估计出现在getchar的使用错误
{
        int get(char a);
        char  b;
        int c,number,abc,other;
        number=abc=other=0;
        b=getchar();//我的理解是getchar 用于拿出单个字符。 而
        c=get(b);//我想让某函数(我也不知道是不是getchar)在输出后拿出某个字符后这个字符会消失,也就是在输入后保存的数据中消失
        for(;b!='/0';)
        {

                if(c==0)
                {
                        number=number+1;
                }
                else if(c==1)
                {
                        abc=abc+1;
                }
                else
                {
                        other=other+1;
                }
                b=getchar();
                c=get(b);

        }
        printf("number is %d,abc is %d,other is %d",number,abc,other);

}
int get(char a)//get用于判断输入的字符是什么类型 数字就代表0 字母代表1 其他代表2
{
        int b;
        if(48>=a&&a<=57)
        {
                b=0;
        }
        else if((65<=a&&a<=90)||(97<=a&&a<=122))
        {
                b=1;
        }
        else
        {
                b=2;
        }
        return(b);
}


最佳答案

查看完整内容

这是修改后的代码及结果,不知道是不是你要的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-8-21 17:22:19 | 显示全部楼层
本帖最后由 liufei_vip 于 2013-8-21 17:51 编辑
  1. #include"stdio.h"
  2. #include <conio.h>
  3. #pragma warning (disable:4996)
  4. void main()//软件用于分别统计输入的数字 字母及其其他字符的个数,问题估计出现在getchar的使用错误
  5. {
  6.         int get(char a);
  7.         char  b;
  8.         int c,number,abc,other;
  9.         number=abc=other=0;
  10.         b=getchar();//我的理解是getchar 用于拿出单个字符。 而
  11.         c=get(b);//我想让某函数(我也不知道是不是getchar)在输出后拿出某个字符后这个字符会消失,也就是在输入后保存的数据中消失
  12.         for(;b!='\n';)   //这里改了
  13.         {
  14.                
  15.                 if(c==0)
  16.                 {
  17.                         number=number+1;
  18.                 }
  19.                 else if(c==1)
  20.                 {
  21.                         abc=abc+1;
  22.                 }
  23.                 else
  24.                 {
  25.                         other=other+1;
  26.                 }
  27.                 b=getchar();
  28.                 c=get(b);
  29.                
  30.         }
  31.         printf("number is %d,abc is %d,other is %d",number,abc,other);
  32.         
  33. }
  34. int get(char a)//get用于判断输入的字符是什么类型 数字就代表0 字母代表1 其他代表2
  35. {
  36.         int b;
  37.         if(48<=a&&a<=57)  //这里改了
  38.         {
  39.                 b=0;
  40.         }
  41.         else if((65<=a&&a<=90)||(97<=a&&a<=122))
  42.         {
  43.                 b=1;
  44.         }
  45.         else
  46.         {
  47.                 b=2;
  48.         }
  49.         return(b);
  50. }

复制代码
这是修改后的代码及结果,不知道是不是你要的。
1.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-8-21 17:43:10 | 显示全部楼层
可能是接收输入的地方出错了,也就是getchar那里有问题。其实你可以换一种输入方式验证一下,比如scanf。最后你那个for循环判断退出的条件不知道是不是有问题,那个'/0'是什么字符。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-8-21 17:47:42 | 显示全部楼层
还有你判断数字那里写错了
if(48>=a&&a<=57)
应该是 if(48<=a&&a<=57)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-8-21 19:17:49 | 显示全部楼层
本帖最后由 style?b? 于 2013-8-21 20:14 编辑


#include<stdio.h>
#include <string.h>

int main()//软件用于分别统计输入的数字 字母及其其他字符的个数,问题估计出现在getchar的使用错误
{
        int get(char a);
        char b[1002];
        int c,number,abc,other;
        number=abc=other=0;
                printf("请输入字符串:\n");
                gets(b);
        for(int i=0;b!='\0';i++)
        {      

                c=get(b);
                if(c==0)
                {
                        number=number+1;
                }
                else if(c==1)
                {
                        abc=abc+1;
                }
                else if(c==2)
                {
                        other=other+1;
                }


        }
        printf("number is %d,abc is %d,other is %d.\n",number,abc,other);
                return 0;

}
int get(char a)//get用于判断输入的字符是什么类型 数字就代表0 字母代表1 其他代表2
{      
        int j;
        if((a>='0')&&(a<='9'))

                j=0;

        else if(((a>='a')&&(a<='z'))||((a>='A')&&(a<='Z')))

                j=1;

        else

                j=2;

        return(j);
}



想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-8-21 20:32:20 | 显示全部楼层

/0不是空数据么!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-8-21 20:41:21 | 显示全部楼层
好人 发表于 2013-8-21 20:32
/0不是空数据么!

空数据怎么输入。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-8-21 20:43:12 | 显示全部楼层
liufei_vip 发表于 2013-8-21 20:41
空数据怎么输入。。。

我的原本意图是检测到空数据就停止!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-8-21 21:14:02 | 显示全部楼层
好人 发表于 2013-8-21 20:43
我的原本意图是检测到空数据就停止!

嗯,我不认识那个/0就改成回车了,其实主要是判断是不是数字的时候把大于小于写错了。是粗心的问题。程序本身没有问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-8-28 13:54:21 | 显示全部楼层
学习学习~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-8-29 22:10:47 | 显示全部楼层
   for(int i=0;b!='\0';i++)
循环体有问题读取的始终是  b数组地址  改成for(;*b!=0;b++)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-8-29 22:13:58 | 显示全部楼层
我超把,style?b? 当成楼主了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-29 07:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表