春江水暖鸭好吃 发表于 2020-3-1 23:38:28

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

#include <stdio.h>
void main()//统计输入数字,空白符和其他符号
{
        int i,num={0},blank=0,others=0;
        char c;
        while(c=getchar()!=EOF)
        {
                if(c>='0'&&c<='9')
                {
                        ++num;
                }
                else
                {
                        if(c==' '||c=='\n'||c=='\t')
                        {
                                ++blank;
                        }
                        else
                        {
                                ++others;
                        }
                }
        }
        for(i=0;i<=9;i++)
        {
                printf("数字%d有%d个\n",i,num);
        }
       
    printf("blank有%d个\n",blank);
    printf("others有%d个\n",others);
}

春江水暖鸭好吃 发表于 2020-3-1 23:43:00

不知道哪里错了,又没有大佬指教一下谢谢了

小笨笨难得糊涂 发表于 2020-3-2 00:45:06

在while循环的条件地方,我改了下,你看看

#include <stdio.h>
void main()//统计输入数字,空白符和其他符号
{
         int i,num={0},blank=0,others=0;
         char c;
         while((c=getchar())!='\n')                     
         {
               if(c>='0'&&c<='9')
               {
                          i=c-'0';
                         num++;
               }
               else
               {
                         if(c==' '||c=='\n'||c=='\t')
                         {
                                 blank++;
                         }
                         else
                         {
                                 others++;
                         }
               }
         }
         for(i=0;i<=9;i++)
         {
               printf("数字%d有%d个\n",i,num);
         }         
   printf("blank有%d个\n",blank);
   printf("others有%d个\n",others);
}

major_lyu 发表于 2020-3-2 00:50:22

首先,!= 元素符的优先级是高于等号运算符的,所以while循环的条件表达式应该修改成
while((c=getchar())!= EOF)。
其次, EOF这个字符你在键盘怎么输入?EOF一般是针对文件读取的,判断文件结束的。键盘输入一般以回车结束。所以呢,这一句应该改成:
while((c=getchar())!= '\n');

小笨笨难得糊涂 发表于 2020-3-2 00:51:09

要用while((c=getchar())!=EOF) 的话要用CTRL+Z结束输入,否则不会结束

jackz007 发表于 2020-3-2 02:02:06

本帖最后由 jackz007 于 2020-3-2 02:14 编辑

#include <stdio.h>
main(void)
{
      char c , num                                          ;
      int i , blank , digit , other                              ;
      for(blank = 0 , digit = 0 , other = 0 ; (c = getchar()) != EOF ;) {
                if(c >= '0' && c <= '9') num = 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)      ;
      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                                          ;
      int i , blank , digit , other                              ;
      for(blank = 0 , digit = 0 , other = 0 ; (c = getchar()) != EOF ;) {
                if(c >= '0' && c <= '9') num = 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)      ;
      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>

春江水暖鸭好吃 发表于 2020-3-14 14:33:20

小笨笨难得糊涂 发表于 2020-3-2 00:45
在while循环的条件地方,我改了下,你看看

#include


谢谢!就是因为循环判断哪里没有处理好

春江水暖鸭好吃 发表于 2020-3-14 14:33:52

major_lyu 发表于 2020-3-2 00:50
首先,!= 元素符的优先级是高于等号运算符的,所以while循环的条件表达式应该修改成

其次, EOF这个字符 ...

谢谢你 学到了很多细节

春江水暖鸭好吃 发表于 2020-3-14 14:35:33

小笨笨难得糊涂 发表于 2020-3-2 00:51
要用while((c=getchar())!=EOF) 的话要用CTRL+Z结束输入,否则不会结束

谢谢你。我还想请问一下,我输入 CTRL+Z回车 再输入CTRL+Z才会有结果 为啥啊?

春江水暖鸭好吃 发表于 2020-3-14 14:37:29

jackz007 发表于 2020-3-2 02:02
编译、运行实况:

谢谢但是就是结果好乱 {:5_104:}

用心挽留python 发表于 2020-5-18 22:48:40

补充下看法,这个函数头文件没有#include <conio.h>,_getch()运行会受影响吧。

gogo57913 发表于 2021-8-31 16:29:40

我也是这题完全没懂 在调用函数的时候编译器一直报错
页: [1]
查看完整版本: 求值!!!统计输入数字,空白符以及其他字符的值