鱼C论坛

 找回密码
 立即注册
查看: 1101|回复: 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.
if(ss[i] >= 0 && ss[i] <= 9)
因为gets接受的是字符,所以if应该判断ss[i]是不是应该为字符'0'-‘9’,而不是数字0-9
应该为
if(ss[i] >= '0' && ss[i] <= '9')
2.
aa[ss[i]]++;
和第一个相似,输入的都是字符,'0'对应的ascii为48,,'1'对应的ascii是49........'9'对应的ascii是57,所以应该是
aa[ss[i] - 48]++;
3.
printf("%c-%d\n", i, aa[i]);
输出时,i为整型,不能用%c,应该是
printf("%d-%d\n", i, aa[i]);

完整的代码
#include<stdio.h>
#include<stdlib.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] - 48]++;
                }
        }
        for(i = 0; i <= 9; i++)
        {
                if(aa[i] != '\0')
                {
                        printf("%d-%d\n", i, aa[i]);
                }
        }
        system("pause");
        return 0;

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

使用道具 举报

发表于 2020-11-22 14:22:51 | 显示全部楼层
本帖最后由 jackz007 于 2020-11-22 14:24 编辑
        for(i = 0; ss[i] != '\0'; i++)
        {
                if(ss[i] >= 0 && ss[i] <= 9)     // 这一句要改
                {
                        aa[ss[i]]++;             // 这一句要改
                }
        }
        for(i = 0; ss[i] != '\0'; i++)
        {
                if(ss[i] >= '0' && ss[i] <= '9') 
                {
                        aa[ss[i] - '0']++; 
                }
        }
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-22 14:27:37 | 显示全部楼层    本楼为最佳答案   
一共有三处错误
1.
if(ss[i] >= 0 && ss[i] <= 9)
因为gets接受的是字符,所以if应该判断ss[i]是不是应该为字符'0'-‘9’,而不是数字0-9
应该为
if(ss[i] >= '0' && ss[i] <= '9')
2.
aa[ss[i]]++;
和第一个相似,输入的都是字符,'0'对应的ascii为48,,'1'对应的ascii是49........'9'对应的ascii是57,所以应该是
aa[ss[i] - 48]++;
3.
printf("%c-%d\n", i, aa[i]);
输出时,i为整型,不能用%c,应该是
printf("%d-%d\n", i, aa[i]);

完整的代码
#include<stdio.h>
#include<stdlib.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] - 48]++;
                }
        }
        for(i = 0; i <= 9; i++)
        {
                if(aa[i] != '\0')
                {
                        printf("%d-%d\n", i, aa[i]);
                }
        }
        system("pause");
        return 0;

}
想知道小甲鱼最近在做啥?请访问 -> 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不能用整型
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, 2025-1-12 13:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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