鱼C论坛

 找回密码
 立即注册
查看: 1937|回复: 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);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-3-1 23:43:00 | 显示全部楼层
不知道哪里错了,又没有大佬指教一下谢谢了
想知道小甲鱼最近在做啥?请访问 -> 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);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-2 00:50:22 | 显示全部楼层
首先,!= 元素符的优先级是高于等号运算符的,所以while循环的条件表达式应该修改成
while((c=getchar())!= EOF)。
其次, EOF这个字符你在键盘怎么输入?EOF一般是针对文件读取的,判断文件结束的。键盘输入一般以回车结束。所以呢,这一句应该改成:
while((c=getchar())!= '\n');
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-2 00:51:09 | 显示全部楼层
要用while((c=getchar())!=EOF) 的话要用CTRL+Z结束输入,否则不会结束
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-2 02:02:06 | 显示全部楼层
本帖最后由 jackz007 于 2020-3-2 02:14 编辑
#include <stdio.h>
main(void)
{
        char c , num[256]                                            ;
        int i , blank , digit , other                                ;
        for(blank = 0 , digit = 0 , other = 0 ; (c = getchar()) != EOF ;) {
                if(c >= '0' && c <= '9') num[digit ++] = c           ;
                else if(c == '\t' || c == '\n' || c == ' ') blank ++ ;
                else other ++                                        ;
        }
        printf("数字有%d个\n" , digit)                               ;
        for(i = 0 ; i < digit ; i ++) printf("\t%c\n" , num[i])      ;
        printf("blank有 %d 个\n" , blank)                            ;
        printf("其他字符有 %d 个\n" , other)                         ;
        printf("\n")                                                 ;
}
        编译、运行实况:
C:\Bin>g++ -o x x.c

C:\Bin>x
#include <stdio.h>
main(void)
{
        char c , num[256]                                            ;
        int i , blank , digit , other                                ;
        for(blank = 0 , digit = 0 , other = 0 ; (c = getchar()) != EOF ;) {
                if(c >= '0' && c <= '9') num[digit ++] = c           ;
                else if(c == '\t' || c == '\n' || c == ' ') blank ++ ;
                else other ++                                        ;
        }
        printf("数字有%d个\n" , digit)                               ;
        for(i = 0 ; i < digit ; i ++) printf("\t%c\n" , num[i])      ;
        printf("blank有 %d 个\n" , blank)                            ;
        printf("其他字符有 %d 个\n" , other)                         ;
        printf("\n")                                                 ;
}
^Z
数字有9个
        2
        5
        6
        0
        0
        0
        0
        9
        0
blank有 480 个
其他字符有 341 个


C:\Bin>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

#include

谢谢!就是因为循环判断哪里没有处理好
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

其次, EOF这个字符 ...

谢谢你 学到了很多细节
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

谢谢你。我还想请问一下,我输入 CTRL+Z  回车 再输入  CTRL+Z  才会有结果 为啥啊?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

谢谢  但是就是结果好乱
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-18 22:48:40 | 显示全部楼层
补充下看法,这个函数头文件没有#include <conio.h>,_getch()运行会受影响吧。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-31 16:29:40 | 显示全部楼层
我也是这题  完全没懂 在调用函数的时候  编译器一直报错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-22 04:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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