鱼C论坛

 找回密码
 立即注册
查看: 993|回复: 5

[已解决]学校作业,求助

[复制链接]
发表于 2020-11-22 13:59:30 | 显示全部楼层 |阅读模式

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

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

x
  编写一程序P275.C实现以下功能
  从键盘读入一行字符(约定:字符数≤127字节),统计并显示该行字符中10个数字字符各自出现的次数,没有出现的字符不显示。编程可用素材:printf("请输入一行字符:")、printf("统计结果为:\n")、printf("%c-%d\n"…。
  程序的运行效果应类似地如图1和图2所示,图1和图2中的红色部分是从键盘输入的内容。

请输入一行字符:a653  xAXaxii23523!=-xi351xizxiax
统计结果为:
1-1
2-2
3-4
5-3
6-1
图1 程序运行效果示例1

请输入一行字符:p0hr r00']\ rv5yj 9 hpOORH sV5yy vy  y9
统计结果为:
0-3
5-2
9-2
图1 程序运行效果示例2

以下是我写的,有错,如果可以的话请帮我看看哪儿错了
#include<stdio.h>
int main(void)
{
        char ss[128];
        int i, aa[10] = {0};

        printf("请输入一行字符:");
        gets(ss);

        printf("统计结果为:\n");

        for(i = 0; ss[i] != '\0'; i++)
        {
                if(ss[i] >= 0 && ss[i] <= 9)
                {
                        aa[ss[i]]++;
                }
        }
        for(i = 0; i <= 9; i++)
        {
                if(aa[i] != '\0')
                {
                        printf("%c-%d\n", i, aa[i]);
                }
        }
        return 0;

}
最佳答案
2020-11-22 14:27:37
一共有三处错误
1.
  1. if(ss[i] >= 0 && ss[i] <= 9)
复制代码

因为gets接受的是字符,所以if应该判断ss是不是应该为字符'0'-‘9’,而不是数字0-9
应该为
  1. if(ss[i] >= '0' && ss[i] <= '9')
复制代码

2.
  1. aa[ss[i]]++;
复制代码

和第一个相似,输入的都是字符,'0'对应的ascii为48,,'1'对应的ascii是49........'9'对应的ascii是57,所以应该是
  1. aa[ss[i] - 48]++;
复制代码

3.
  1. printf("%c-%d\n", i, aa[i]);
复制代码

输出时,i为整型,不能用%c,应该是
  1. printf("%d-%d\n", i, aa[i]);
复制代码


完整的代码
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. int main(void)
  4. {
  5.         char ss[128];
  6.         int i, aa[10] = {0};

  7.         printf("请输入一行字符:");
  8.         gets(ss);

  9.         printf("统计结果为:\n");

  10.         for(i = 0; ss[i] != '\0'; i++)
  11.         {
  12.                 if(ss[i] >= '0' && ss[i] <= '9')
  13.                 {
  14.                         aa[ss[i] - 48]++;
  15.                 }
  16.         }
  17.         for(i = 0; i <= 9; i++)
  18.         {
  19.                 if(aa[i] != '\0')
  20.                 {
  21.                         printf("%d-%d\n", i, aa[i]);
  22.                 }
  23.         }
  24.         system("pause");
  25.         return 0;

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

使用道具 举报

发表于 2020-11-22 14:22:51 | 显示全部楼层
本帖最后由 jackz007 于 2020-11-22 14:24 编辑
  1.         for(i = 0; ss[i] != '\0'; i++)
  2.         {
  3.                 if(ss[i] >= 0 && ss[i] <= 9)     // 这一句要改
  4.                 {
  5.                         aa[ss[i]]++;             // 这一句要改
  6.                 }
  7.         }
复制代码

  1.         for(i = 0; ss[i] != '\0'; i++)
  2.         {
  3.                 if(ss[i] >= '0' && ss[i] <= '9')
  4.                 {
  5.                         aa[ss[i] - '0']++;
  6.                 }
  7.         }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-22 14:27:37 | 显示全部楼层    本楼为最佳答案   
一共有三处错误
1.
  1. if(ss[i] >= 0 && ss[i] <= 9)
复制代码

因为gets接受的是字符,所以if应该判断ss是不是应该为字符'0'-‘9’,而不是数字0-9
应该为
  1. if(ss[i] >= '0' && ss[i] <= '9')
复制代码

2.
  1. aa[ss[i]]++;
复制代码

和第一个相似,输入的都是字符,'0'对应的ascii为48,,'1'对应的ascii是49........'9'对应的ascii是57,所以应该是
  1. aa[ss[i] - 48]++;
复制代码

3.
  1. printf("%c-%d\n", i, aa[i]);
复制代码

输出时,i为整型,不能用%c,应该是
  1. printf("%d-%d\n", i, aa[i]);
复制代码


完整的代码
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. int main(void)
  4. {
  5.         char ss[128];
  6.         int i, aa[10] = {0};

  7.         printf("请输入一行字符:");
  8.         gets(ss);

  9.         printf("统计结果为:\n");

  10.         for(i = 0; ss[i] != '\0'; i++)
  11.         {
  12.                 if(ss[i] >= '0' && ss[i] <= '9')
  13.                 {
  14.                         aa[ss[i] - 48]++;
  15.                 }
  16.         }
  17.         for(i = 0; i <= 9; i++)
  18.         {
  19.                 if(aa[i] != '\0')
  20.                 {
  21.                         printf("%d-%d\n", i, aa[i]);
  22.                 }
  23.         }
  24.         system("pause");
  25.         return 0;

  26. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-22 15:22:47 | 显示全部楼层
小甲鱼的铁粉 发表于 2020-11-22 14:27
一共有三处错误
1.
因为gets接受的是字符,所以if应该判断ss是不是应该为字符'0'-‘9’,而不是数字0-9

第三个错误那里,作业要求输出格式必须为printf("%c-%d\n"…。i不能用整型
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-22 15:52:28 | 显示全部楼层
王祖宇 发表于 2020-11-22 15:22
第三个错误那里,作业要求输出格式必须为printf("%c-%d\n"…。i不能用整型
  1. printf("%c-%d\n", i+48, aa[i]);
复制代码

那这样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-22 15:53:37 | 显示全部楼层
这个题的目的应该是加深对字符的ascii码的理解的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-19 19:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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