Xenia呐 2024-04-27 17:43 采纳率: 33.3%
浏览 3

(逐数字读入,用flag判断第一个数字前不加空格) 念数字

题目:(逐数字读入,用flag判断第一个数字前不加空格) 念数字
请问我这个代码有什么问题吗?感谢!


#include <stdio.h>
int main() {
    int flag = 0;
    char t;
    t = getchar();
    while (t != '\0') {
        if (flag == 1)
            printf(" ");
        switch (t) {
            case '-':printf("fu");break;
            case '0':printf("ling");break;
            case '1':printf("yi");break;
            case '2':printf("er");break;
            case '3':printf("san");break;
            case '4':printf("si");break;
            case '5':printf("wu");break;
            case '6':printf("liu");break;
case '7':printf("qi");break;
            case '8':printf("ba");break;
            case '9':printf("jiu");
        }
        flag = 1;
        t = getchar();
    }
    return 0;
}

img

  • 写回答

5条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-27 17:43
    关注

    引自免费微信小程序:皆我百晓生

    你的代码基本上实现了逐个读取输入的字符并根据字符打印对应的中文数字,但是存在一些小问题。以下是修改后的代码,并对其中的问题进行了注释:

    #include <stdio.h>
    
    int main() {
        int flag = 0; // 初始化标志为0,表示尚未遇到第一个数字
        char t;
    
        // 循环处理输入的每一个字符
        while ((t = getchar()) != EOF) { // 使用EOF作为循环结束条件,而不是'\0',因为标准输入不会包含'\0'
            if (t == ' ') { // 如果读到的是空格,跳过并继续读下一个字符
                continue;
            } else if (flag == 0 && (t == '-' || isdigit(t))) { // 如果是第一个数字(包括负号),不打印空格
                flag = 1;
            } else if (isdigit(t)) { // 如果是数字,打印空格后再打印对应中文数字
                printf(" ");
            }
    
            switch (t) {
                case '-': printf("fu"); break;
                case '0': printf("ling"); break;
                case '1': printf("yi"); break;
                case '2': printf("er"); break;
                case '3': printf("san"); break;
                case '4': printf("si"); break;
                case '5': printf("wu"); break;
                case '6': printf("liu"); break;
                case '7': printf("qi"); break;
                case '8': printf("ba"); break;
                case '9': printf("jiu"); break;
            }
        }
    
        return 0;
    }
    

    主要改进点:

    1. 将循环的结束条件从t != '\0'更改为t != EOF。在标准输入流中,通常没有\0字符,而EOF是文件结束的特殊值。
    2. 添加了一个额外的条件检查,当读到空格时,跳过并继续读下一个字符。
    3. 对于第一个数字(包括负号)的情况,添加了单独的条件分支,确保第一个数字之前不打印空格。

    现在这个版本的程序应该能正确处理连续输入的数字,包括空格分隔的多个数字。例如,输入"1 2 3"会输出"yi er san"。

    评论 编辑记录

报告相同问题?

问题事件

  • 修改了问题 4月27日
  • 创建了问题 4月27日

悬赏问题

  • ¥20 python忆阻器数字识别
  • ¥15 无法输出helloworld
  • ¥15 高通uboot 打印ubi init err 22
  • ¥20 PDF元数据中的XMP媒体管理属性
  • ¥15 R语言中lasso回归报错
  • ¥15 网站突然不能访问了,上午还好好的
  • ¥15 有没有dl可以帮弄”我去图书馆”秒选道具和积分
  • ¥15 semrush,SEO,内嵌网站,api
  • ¥15 Stata:为什么reghdfe后的因变量没有被发现识别啊
  • ¥15 振荡电路,ADS仿真