蔚蓝 发表于 2014-2-22 22:34:34

C语言34课问题求助

#include <stdio.h>
//小甲鱼c语言第34课后所留问题,统计输入的字符个数,0-9各个数字个数,空格个数,其他字符个数
//程序编译没有问题,就是无法输出结果,输入字符后按回车没有任何反应,求解!!!实在没有办法了.
int main (void)
{
    int number = {0}, blank = 0, other = 0, frequency;
    char character;
    printf ("请输入:");
    character = getchar();

   
    while(1)
    {
      if (character >= 48 && character <= 57)
      {
            number = number + 1;//计算各个数字个数
      }
       elseif (character == 32)
      {
            blank = blank + 1;
      }
      else if (character == 13)
      {
         break;
      }
      else
      {
             other = other + 1;
      }

         character = getchar();
   
    }
   
    for (frequency = 0; frequency < 10; frequency++)
    {
      printf ("数%d有%d个\n", frequency, number);
    }

    printf ("空格有%d个\n", blank);
    printf ("其他字符有%d个", other);
    return 0;
}

夜朽 发表于 2014-2-22 22:34:35

じO-联合 发表于 2014-2-22 23:37 static/image/common/back.gif
对哦 。。。。但是那个if(c==13)的时候好像就break了啊,退出啊啊

不好意思,昨晚没看清楚,我把它改了下,你看看行不行
#include <stdio.h>
//小甲鱼c语言第34课后所留问题,统计输入的字符个数,0-9各个数字个数,空格个数,其他字符个数
//程序编译没有问题,就是无法输出结果,输入字符后按回车没有任何反应,求解!!!实在没有办法了.
int main (void)
{
    int number = {0}, blank = 0, other = 0, frequency;
    char character,ch;
    printf ("请输入:");
    character = getchar();
    getchar();   //吸收空格
   
    while(1)
    {
      if (character >= 48 && character <= 57)
      {
            number = number + 1;//计算各个数字个数
      }
       elseif (character == 32)
      {
            blank = blank + 1;
      }
       /* else if (character == 13) //这里不要了
      {
         break;
      }*/
      else
      {
             other = other + 1;
      }
         if(ch=='\n')break;    //判断ch是不是回车
   
         character = getchar();
               ch=getchar();    //吸收空格,把值赋给ch,

               
    }
   
    for (frequency = 0; frequency < 10; frequency++)
    {
      printf ("数%d有%d个\n", frequency, number);
    }

    printf ("空格有%d个\n", blank);
    printf ("其他字符有%d个", other);

    return 0;
}

oggplay 发表于 2014-2-22 22:58:40

本帖最后由 oggplay 于 2014-2-23 14:17 编辑

看清楚getchar的类型 修改完毕
//随便输入一行小于等于11个数据,回车后打印结果并立即结束程序返回shell!
//如果输入数据大于11个,程序将给出出错信息!
#include <stdio.h>
int main ()
{   int character,frequency,blank=0,other=0,number={0};
    int i;
    printf("请输入小于等于11个数据,按回车结束:");
   
    for (i=0;(character = getchar())!= '\n';i++)
   {   
            if (i>10) {printf("输入数据超过上限!\n");return 0;}
            printf("%c\n",character);//回显输入的数据
                     
            if (character >= 48 && character <= 57)
               {number = number + 1; }
               elseif (character == 32)
                     {blank = blank + 1; }
                      else
                      { other = other + 1; }
            }
         
    for (frequency = 0; frequency < 10; frequency++)
       printf ("数%d有%d个\n", frequency, number);
   

    printf ("空格有%d个\n", blank);
    printf ("其他字符有%d个\n", other);
    return 0;   }

zhaopengfei 发表于 2014-2-22 23:21:28

把你的 else if (character == 13); 这句改为else if (character == '\n') ;就可以啦!

じO-联合 发表于 2014-2-22 23:25:15

oggplay 发表于 2014-2-22 22:58 static/image/common/back.gif
看清楚getchar的类型

老兄你好热心,我要像你学习。。。

夜朽 发表于 2014-2-22 23:28:48

while(1)是无限循环,也就是意味着你要一直输入、、、、

じO-联合 发表于 2014-2-22 23:32:43

getchar返回的貌似是int类型的吧。

夜朽 发表于 2014-2-22 23:34:27

夜朽 发表于 2014-2-22 23:28 static/image/common/back.gif
while(1)是无限循环,也就是意味着你要一直输入、、、、

改成有条件的结束就行。。。比如以回车符结束:while(character!='\n'){};
屏幕输入要连续输,每个字符之间空格,最后一个回车结束

じO-联合 发表于 2014-2-22 23:37:15

夜朽 发表于 2014-2-22 23:34 static/image/common/back.gif
改成有条件的结束就行。。。比如以回车符结束:while(character!='\n'){};
屏幕输入要连续输,每个字符之 ...

对哦 。。。。但是那个if(c==13)的时候好像就break了啊,退出啊啊

oggplay 发表于 2014-2-22 23:39:57

本帖最后由 oggplay 于 2014-2-22 23:43 编辑

じO-联合 发表于 2014-2-22 23:32 static/image/common/back.gif
getchar返回的貌似是int类型的吧。
问题不是这个,主要是character很难用 太晚了,没法帮了

仰望天上的光 发表于 2014-2-23 00:40:41

int main (void)
{
        int number = {0}, blank = 0, other = 0, frequency;
        char character;
        printf ("请输入:");
        character = getchar();       
    while(1)
        {
                if( character=='\n' ) break;//加上这句
                if (character >= 48 && character <= 57)
                {
                        number = number + 1;//计算各个数字个数
                }
      elseif (character == 32)
                {
                        blank = blank + 1;
                }
                else if (character == 13)
      {
            break;
                }
                else
                {
                        other = other + 1;
                }       
                character = getchar();               
    }       
    for (frequency = 0; frequency < 10; frequency++)
        {
                printf ("数%d有%d个\n", frequency, number);
        }
    printf ("空格有%d个\n", blank);
        printf ("其他字符有%d个", other);
        return 0;
}

oggplay 发表于 2014-2-23 13:12:33

本帖最后由 oggplay 于 2014-2-23 15:20 编辑

升级版://随便输入一行小于等于11个数据,回车后打印结果!
//如果输入数据大于11个,程序将给出出错信息!
#include <stdio.h>
int main ()
{   int character,frequency,blank=0,other=0,number={0};
    int i;
    printf("按回车键继续,输入其它键退出程序:");
    while(character = getchar())

      {if (character!='\n') return 0;

      printf("\n");
      printf("请输入小于等于11个数据,按回车结束:");
         for (i=0;(character = getchar())!= '\n';i++)
       {   
            if (i>10) {printf("输入数据超过上限!\n");return 0;}
            printf("%c\n",character);//回显输入的数据
                     
            if (character >= 48 && character <= 57)
               {number = number + 1; }
            else { if (character == 32)
                     {blank = blank + 1; }
                      else
                        { other = other + 1; }}
       }
         
    for (frequency = 0; frequency < 10; frequency++)
      {printf ("数%d有%d个\n", frequency, number);}
   

    printf ("空格有%d个\n", blank);
    printf ("其他字符有%d个\n", other);
    blank=0;other=0;
   for (i = 0; i< 10; i++)
      { number=0;}
    printf("按回车键继续,输入其他任意键退出程序:");
      }
    return 0;}

SunlightPC 发表于 2014-2-26 21:00:57

上面oggplay的貌似正确
页: [1]
查看完整版本: C语言34课问题求助