Choice~ 2024-03-01 10:25 采纳率: 60%
浏览 4

c语言输入输出流问题

怎么才能让这个不正常字符不执行任何操作,下图情况出现我的一些回车也有字符出现,并且有多少个字符打印多少个菜单的情况

img

  • 写回答

3条回答 默认 最新

  • 关注

    挨踢程序员 上午好☀️☀️☀️️
    本答案参考通义千问

    看起来你遇到了C语言输入输出(I/O)中处理非预期字符的问题,特别是在读取用户输入时。要解决这个问题,你可以使用getchar()函数来逐个读取字符,并检查每个字符是否是你想要的。对于菜单选项,可以只处理特定的字符(如数字或特定的菜单选项字符串)。以下是一个简单的解决方案:

    1. 使用while循环和getchar()来读取用户的输入,直到遇到预期的分隔符(例如空格、换行符或特定选项字符)。
    2. 在循环内部,检查读取的字符是否是菜单选项或特殊字符。如果不是,跳过它。
    3. 当遇到有效的选项时,存储它并结束循环。

    这里是修改后的代码示例:

    #include <stdio.h>
    
    void print_menu() {
        printf("Please choose: HH 水*水*水*米***米*水米*米*米**米米米**米*米*米*米米米米米米米米*水**米**米*平***米 *\n");
        // ... 其他菜单项
    }
    
    int main() {
        int choice;
        char input_char;
    
        while (1) {
            printf("PLaS已Ch00Se:***********************************************\n");
            print_menu();
            printf("PLease che005e:"); // 修改了拼写,这里仅做示例
    
            // 读取字符并处理
            while ((input_char = getchar()) != '\n' && // 换行符表示用户选择
                   input_char != '1' && input_char != '2' && // 假设数字是有效选项
                   input_char != '3' && // ... 更多选项
                   input_char != EOF) { // 如果不是EOF(表示输入结束),继续读取
                if (isprint(input_char)) { // 如果是可打印字符(非控制字符)
                    printf("*"); // 打印星号表示忽略该字符
                }
            }
    
            // 处理用户选择,如转换为整数
            choice = input_char - '1'; // 假设用户输入的是1-3之间的数字
            if (choice >= 1 && choice <= 3) {
                break; // 如果选择有效,退出循环
            } else {
                printf("Invalid choice. Please try again.\n");
            }
        }
    
        // 用户选择了有效选项后,执行相应操作
        switch (choice) {
            case 1:
                // handle query_word
                break;
            case 2:
                // handle history_record
                break;
            case 3:
                // handle quit
                break;
            default:
                printf("Invalid choice. Exiting...\n");
                break;
        }
    
        return 0;
    }
    

    这段代码会忽略输入中的所有非预期字符,并在用户输入有效菜单选项时结束循环。记得根据实际需求调整菜单选项和处理逻辑。

    评论

报告相同问题?

问题事件

  • 创建了问题 3月1日

悬赏问题

  • ¥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仿真
  • ¥15 关于#c语言#的问题,请各位专家解答!