鱼C论坛

 找回密码
 立即注册
查看: 2456|回复: 12

C语言34课问题求助

[复制链接]
发表于 2014-2-22 22:34:34 From FishC Mobile | 显示全部楼层 |阅读模式
50鱼币
#include <stdio.h>
//小甲鱼c语言第34课后所留问题,统计输入的字符个数,0-9各个数字个数,空格个数,其他字符个数
//程序编译没有问题,就是无法输出结果,输入字符后按回车没有任何反应,求解!!!实在没有办法了.
int main (void)
{
    int number[10] = {0}, blank = 0, other = 0, frequency;
    char character;
    printf ("请输入:");
    character = getchar();
  
   
    while(1)
    {
        if (character >= 48 && character <= 57)
        {
            number[character - 48] = number[character - 48] + 1;  //计算各个数字个数
        }
       else  if (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[frequency]);
    }

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

最佳答案

查看完整内容

不好意思,昨晚没看清楚,我把它改了下,你看看行不行 #include //小甲鱼c语言第34课后所留问题,统计输入的字符个数,0-9各个数字个数,空格个数,其他字符个数 //程序编译没有问题,就是无法输出结果,输入字符后按回车没有任何反应,求解!!!实在没有办法了. int main (void) { int number[10] = {0}, blank = 0, other = 0, frequency; char character,ch; printf ("请输入:"); character = getchar(); ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-2-22 22:34:35 | 显示全部楼层

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

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

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

使用道具 举报

发表于 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[10]={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[character - 48] = number[character - 48] + 1; }
               else  if (character == 32)
                     {blank = blank + 1; }
                      else
                      { other = other + 1; }
              }
           
    for (frequency = 0; frequency < 10; frequency++)
       printf ("数%d有%d个\n", frequency, number[frequency]);
    

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

2014-02-22 22:55:16 的屏幕截图.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-2-22 23:21:28 | 显示全部楼层
把你的 else if (character == 13); 这句改为  else if (character == '\n') ;  就可以啦!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-2-22 23:25:15 | 显示全部楼层
oggplay 发表于 2014-2-22 22:58
看清楚getchar的类型

老兄你好热心,我要像你学习。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-2-22 23:28:48 | 显示全部楼层
while(1)是无限循环,也就是意味着你要一直输入、、、、
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-2-22 23:32:43 | 显示全部楼层
getchar返回的貌似是int类型的吧。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-2-22 23:34:27 | 显示全部楼层
夜朽 发表于 2014-2-22 23:28
while(1)是无限循环,也就是意味着你要一直输入、、、、

改成有条件的结束就行。。。比如以回车符结束:while(character!='\n'){};
屏幕输入要连续输,每个字符之间空格,最后一个回车结束
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-2-22 23:37:15 | 显示全部楼层
夜朽 发表于 2014-2-22 23:34
改成有条件的结束就行。。。比如以回车符结束:while(character!='\n'){};
屏幕输入要连续输,每个字符之 ...

对哦 。。。。但是那个if(c==13)的时候好像就break了啊,退出啊啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-2-22 23:39:57 | 显示全部楼层
本帖最后由 oggplay 于 2014-2-22 23:43 编辑
じO-联合 发表于 2014-2-22 23:32
getchar返回的貌似是int类型的吧。

问题不是这个,主要是character很难用 太晚了,没法帮了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-2-23 00:40:41 | 显示全部楼层
int main (void)
{
        int number[10] = {0}, blank = 0, other = 0, frequency;
        char character;
        printf ("请输入:");
        character = getchar();        
    while(1)
        {
                if( character=='\n' ) break;//加上这句
                if (character >= 48 && character <= 57)
                {
                        number[character - 48] = number[character - 48] + 1;  //计算各个数字个数
                }
        else  if (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[frequency]);
        }
    printf ("空格有%d个\n", blank);
        printf ("其他字符有%d个", other);
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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[10]={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[character - 48] = number[character - 48] + 1; }
              else { if (character == 32)
                     {blank = blank + 1; }
                      else
                        { other = other + 1; }}
       }
           
    for (frequency = 0; frequency < 10; frequency++)
      {printf ("数%d有%d个\n", frequency, number[frequency]);}
    

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

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

使用道具 举报

发表于 2014-2-26 21:00:57 | 显示全部楼层
上面oggplay的貌似正确
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-23 18:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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