鱼C论坛

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

请教一个程序~

[复制链接]
发表于 2025-10-21 21:27:51 | 显示全部楼层 |阅读模式

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

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

x
编写一个用来统计输入的各个数字、空白符(空格、制表符、换行符)以及所有其他字符出现次数的程序。
分别存储在变量num[10],blank,others里边并打印出来......
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2025-10-21 21:29:46 | 显示全部楼层
您好!以下是一个用Python编写的程序,可以统计输入中数字、空白符(包括空格、制表符和换行符)以及其他字符的出现次数。程序会读取所有输入,然后遍历每个字符进行分类统计,最后将结果存储在变量 numblankothers 中并打印出来。


  1. import sys

  2. def main():
  3.     # 读取所有输入
  4.     data = sys.stdin.read()
  5.    
  6.     # 初始化计数器
  7.     num = 0
  8.     blank = 0
  9.     others = 0
  10.    
  11.     # 遍历每个字符并分类统计
  12.     for char in data:
  13.         if char.isdigit():
  14.             num += 1
  15.         elif char in ' \t\n':
  16.             blank += 1
  17.         else:
  18.             others += 1
  19.    
  20.     # 打印结果
  21.     print("数字出现次数:", num)
  22.     print("空白符出现次数:", blank)
  23.     print("其他字符出现次数:", others)

  24. if __name__ == "__main__":
  25.     main()
复制代码


使用说明:运行程序后,您可以输入任意文本(可以包含多行),输入结束后按 Ctrl+D(在 Unix/Linux/Mac 系统)或 Ctrl+Z 然后按 Enter(在 Windows 系统)来结束输入,程序会自动输出统计结果。

希望这个程序对您有帮助!如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-10-21 21:59:08 | 显示全部楼层
FishC 发表于 2025-10-21 21:29
您好!以下是一个用Python编写的程序,可以统计输入中数字、空白符(包括空格、制表符和换行符)以及其他字 ...

不好意思,没说清楚,我想用C实现
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-10-21 21:59:35 | 显示全部楼层
但求过程001 发表于 2025-10-21 21:59
FishC 发表于 2025-10-21 21:29
您好!以下是一个用P ...


没问题!以下是用C语言实现的程序,可以统计输入中数字、空白符(包括空格、制表符和换行符)以及其他字符的出现次数:


  1. #include <stdio.h>

  2. int main() {
  3.     int c;
  4.     int num = 0, blank = 0, others = 0;
  5.    
  6.     printf("请输入字符(按Ctrl+D或Ctrl+Z结束输入):\n");
  7.    
  8.     while ((c = getchar()) != EOF) {
  9.         if (c >= '0' && c <= '9') {
  10.             num++;
  11.         } else if (c == ' ' || c == '\t' || c == '\n') {
  12.             blank++;
  13.         } else {
  14.             others++;
  15.         }
  16.     }
  17.    
  18.     printf("数字出现次数: %d\n", num);
  19.     printf("空白符出现次数: %d\n", blank);
  20.     printf("其他字符出现次数: %d\n", others);
  21.    
  22.     return 0;
  23. }
复制代码


程序说明:
1. 使用 getchar() 逐个读取字符,直到遇到文件结束符(EOF)
2. 通过条件判断对字符进行分类统计:
   - 数字字符:ASCII码在 '0' 到 '9' 之间
   - 空白符:空格、制表符(\t)、换行符(\n)
   - 其他字符:不属于以上两类的所有字符

使用方法:
- 运行程序后输入文本
- 输入结束后按 Ctrl+D(Linux/Mac)或 Ctrl+Z(Windows)结束输入
- 程序会立即显示统计结果

这个程序会准确地统计您输入内容中各类字符的出现次数!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-10-22 23:17:26 | 显示全部楼层
FishC 发表于 2025-10-21 21:59
没问题!以下是用C语言实现的程序,可以统计输入中数字、空白符(包括空格、制表符和换行符)以及其他 ...

程序已经运行成功了,但是好像我输入字符或者数字后,按ctrl+D并没有出现答案,我得按回车然后再按ctrl+D再回车才会出现结果,为啥呢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-10-22 23:18:27 | 显示全部楼层
但求过程001 发表于 2025-10-22 23:17
FishC 发表于 2025-10-21 21:59
没问题!以下是用C语 ...


您遇到的情况是正常的,这与终端输入缓冲机制有关。让我来解释一下原因和解决方案:

原因分析:
- 标准输入默认是行缓冲模式,需要遇到换行符才会提交给程序
- Ctrl+D 在Unix/Linux系统中表示EOF(文件结束符)
- 当您在行中间按Ctrl+D时,终端会立即提交当前行内容,但程序仍在等待更多输入
- 只有当您在空行按Ctrl+D时,才会真正结束输入

解决方案:


  1. #include <stdio.h>
  2. #include <ctype.h>

  3. int main() {
  4.     int c;
  5.     int num = 0, blank = 0, others = 0;
  6.    
  7.     printf("请输入字符(输入完成后按回车,然后在空行按Ctrl+D结束):\n");
  8.    
  9.     while ((c = getchar()) != EOF) {
  10.         if (isdigit(c)) {
  11.             num++;
  12.         } else if (c == ' ' || c == '\t' || c == '\n') {
  13.             blank++;
  14.         } else {
  15.             others++;
  16.         }
  17.     }
  18.    
  19.     printf("数字出现次数: %d\n", num);
  20.     printf("空白符出现次数: %d\n", blank);
  21.     printf("其他字符出现次数: %d\n", others);
  22.    
  23.     return 0;
  24. }
复制代码


正确的使用步骤:
1. 输入您的文本内容
2. 按 回车
3. 在新的一行(空行)按 Ctrl+D
4. 程序会立即输出统计结果

如果您希望实现"即时统计"(每输入一个字符就立即处理),那就需要改变终端的输入模式,但这会涉及更复杂的代码。

现在您应该理解为什么需要先按回车再按Ctrl+D了!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-10-23 23:39:19 | 显示全部楼层
我先输入文本内容,然后按回车,然后再按ctrl+Z,就出现结果了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-10-23 23:39:43 | 显示全部楼层
但求过程001 发表于 2025-10-23 23:39
我先输入文本内容,然后按回车,然后再按ctrl+Z,就出 ...


是的,您描述的操作流程是正确的!在 Windows 系统中,确实需要先输入内容,然后按回车,再按 Ctrl+Z,最后再按回车才会出现结果。

让我解释一下这个流程的原因:

1. 先输入文本内容:程序需要读取字符进行统计
2. 按回车:提交当前行的输入内容
3. 按 Ctrl+Z:在 Windows 中表示 EOF(文件结束符)
4. 再按回车:确认并结束输入

这个流程是 Windows 命令行环境下的标准行为,与终端的输入缓冲机制有关。

您的操作完全正确,程序能够正常运行并输出统计结果就说明一切正常!

如果还有其他编程问题,随时欢迎提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-10-23 23:52:08 | 显示全部楼层
明白了!谢谢
还有个小疑问,为什么c=getchar前面定义c的类型为int型,不是应该字符型吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-10-23 23:52:28 | 显示全部楼层
但求过程001 发表于 2025-10-23 23:52
明白了!谢谢
还有个小疑问,为什么c=getchar前面定 ...


很好的观察!确实,getchar() 返回的是 int 类型而不是 char 类型,这有几个重要原因:

1. EOF 的处理:getchar() 需要能够返回 EOF(通常是 -1),而 char 类型可能无法正确表示这个值

2. 字符范围:普通字符的范围是 0-255,但 getchar() 实际上返回的是 unsigned char 转换为 int 的值

3. 类型安全:使用 int 可以避免符号扩展问题

如果使用 char 类型:


char c;
while ((c = getchar()) != EOF)  // 这样写有问题!
{
    // ...
}


这样写可能会导致无限循环,因为:
- char 可能是有符号的,当读取到值为 255 的字符时
- 在比较 c != EOF 时,char 类型的 255 可能会被解释为 -1
- 这样就无法正确检测到文件结束

所以,正确的做法是:


int c;
while ((c = getchar()) != EOF)
{
    // 在循环体内可以安全地将 c 当作字符使用
    // 因为我们已经确认它不是 EOF
}


这是一个很常见的C语言细节,您能注意到这点说明观察很仔细!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-10-24 00:07:24 | 显示全部楼层
谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2025-10-24 00:07:33 | 显示全部楼层


不客气!很高兴能够帮到您。如果以后在学习编程过程中遇到任何问题,随时欢迎来提问。祝您学习进步![s:26]

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-13 18:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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