鱼C论坛

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

求值!!!统计输入数字,空白符以及其他字符的值

[复制链接]
发表于 2020-3-1 23:38:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <stdio.h>
void main()//统计输入数字,空白符和其他符号
{
        int i,num[10]={0},blank=0,others=0;
        char c;
        while(c=getchar()!=EOF)
        {
                if(c>='0'&&c<='9')
                {
                        ++num[c-'0'];
                }
                else
                {
                        if(c==' '||c=='\n'||c=='\t')
                        {
                                ++blank;
                        }
                        else
                        {
                                ++others;
                        }
                }
        }
        for(i=0;i<=9;i++)
        {
                printf("数字%d有%d个\n",i,num[i]);
        }
       
    printf("blank有%d个\n",blank);
    printf("others有%d个\n",others);
}
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-3-1 23:43:00 | 显示全部楼层
不知道哪里错了,又没有大佬指教一下谢谢了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-2 00:45:06 | 显示全部楼层
在while循环的条件地方,我改了下,你看看

#include <stdio.h>
void main()//统计输入数字,空白符和其他符号
{
         int i,num[10]={0},blank=0,others=0;
         char c;
         while((c=getchar())!='\n')                     
         {
                 if(c>='0'&&c<='9')
                 {
                            i=c-'0';
                         num[i]++;
                 }
                 else
                 {
                         if(c==' '||c=='\n'||c=='\t')
                         {
                                 blank++;
                         }
                         else
                         {
                                 others++;
                         }
                 }
         }
         for(i=0;i<=9;i++)
         {
                 printf("数字%d有%d个\n",i,num[i]);
         }         
     printf("blank有%d个\n",blank);
     printf("others有%d个\n",others);
}
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-2 00:50:22 | 显示全部楼层
首先,!= 元素符的优先级是高于等号运算符的,所以while循环的条件表达式应该修改成
  1. while((c=getchar())!= EOF)。
复制代码

其次, EOF这个字符你在键盘怎么输入?EOF一般是针对文件读取的,判断文件结束的。键盘输入一般以回车结束。所以呢,这一句应该改成:
  1. while((c=getchar())!= '\n');
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-2 00:51:09 | 显示全部楼层
要用while((c=getchar())!=EOF) 的话要用CTRL+Z结束输入,否则不会结束
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-2 02:02:06 | 显示全部楼层
本帖最后由 jackz007 于 2020-3-2 02:14 编辑
  1. #include <stdio.h>
  2. main(void)
  3. {
  4.         char c , num[256]                                            ;
  5.         int i , blank , digit , other                                ;
  6.         for(blank = 0 , digit = 0 , other = 0 ; (c = getchar()) != EOF ;) {
  7.                 if(c >= '0' && c <= '9') num[digit ++] = c           ;
  8.                 else if(c == '\t' || c == '\n' || c == ' ') blank ++ ;
  9.                 else other ++                                        ;
  10.         }
  11.         printf("数字有%d个\n" , digit)                               ;
  12.         for(i = 0 ; i < digit ; i ++) printf("\t%c\n" , num[i])      ;
  13.         printf("blank有 %d 个\n" , blank)                            ;
  14.         printf("其他字符有 %d 个\n" , other)                         ;
  15.         printf("\n")                                                 ;
  16. }
复制代码

        编译、运行实况:
  1. C:\Bin>g++ -o x x.c

  2. C:\Bin>x
  3. #include <stdio.h>
  4. main(void)
  5. {
  6.         char c , num[256]                                            ;
  7.         int i , blank , digit , other                                ;
  8.         for(blank = 0 , digit = 0 , other = 0 ; (c = getchar()) != EOF ;) {
  9.                 if(c >= '0' && c <= '9') num[digit ++] = c           ;
  10.                 else if(c == '\t' || c == '\n' || c == ' ') blank ++ ;
  11.                 else other ++                                        ;
  12.         }
  13.         printf("数字有%d个\n" , digit)                               ;
  14.         for(i = 0 ; i < digit ; i ++) printf("\t%c\n" , num[i])      ;
  15.         printf("blank有 %d 个\n" , blank)                            ;
  16.         printf("其他字符有 %d 个\n" , other)                         ;
  17.         printf("\n")                                                 ;
  18. }
  19. ^Z
  20. 数字有9个
  21.         2
  22.         5
  23.         6
  24.         0
  25.         0
  26.         0
  27.         0
  28.         9
  29.         0
  30. blank有 480 个
  31. 其他字符有 341 个


  32. C:\Bin>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-14 14:33:20 | 显示全部楼层
小笨笨难得糊涂 发表于 2020-3-2 00:45
在while循环的条件地方,我改了下,你看看

#include

谢谢!就是因为循环判断哪里没有处理好
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-14 14:33:52 | 显示全部楼层
major_lyu 发表于 2020-3-2 00:50
首先,!= 元素符的优先级是高于等号运算符的,所以while循环的条件表达式应该修改成

其次, EOF这个字符 ...

谢谢你 学到了很多细节
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-14 14:35:33 | 显示全部楼层
小笨笨难得糊涂 发表于 2020-3-2 00:51
要用while((c=getchar())!=EOF) 的话要用CTRL+Z结束输入,否则不会结束

谢谢你。我还想请问一下,我输入 CTRL+Z  回车 再输入  CTRL+Z  才会有结果 为啥啊?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-14 14:37:29 | 显示全部楼层
jackz007 发表于 2020-3-2 02:02
编译、运行实况:

谢谢  但是就是结果好乱
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-18 22:48:40 | 显示全部楼层
补充下看法,这个函数头文件没有#include <conio.h>,_getch()运行会受影响吧。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-31 16:29:40 | 显示全部楼层
我也是这题  完全没懂 在调用函数的时候  编译器一直报错
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-26 15:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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