You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言可持续运行的斐波那契数列程序开发问题求助

解决斐波那契数列程序持续运行与输入校验问题

以下是完整的可运行代码,解决了程序无法持续运行、非法输入校验(非正整数、字符串、浮点数)以及输入*终止程序的需求:

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

// 清理输入缓冲区的残留字符,避免后续读取异常
void clear_input_buffer() {
    int c;
    while ((c = getchar()) != '\n' && c != EOF);
}

void calculate_fibonacci_sequence() {
    int eleman;
    int scan_result;
    char check_char;

    while (1) {
        printf("Enter how many elements of the fibonacci sequence you want to see (enter * to exit): ");
        
        // 尝试读取整数,获取scanf的返回值判断读取结果
        scan_result = scanf("%d", &eleman);
        
        if (scan_result == EOF) {
            clear_input_buffer();
            break;
        } else if (scan_result == 0) {
            // 读取整数失败,检查是否是终止符*
            check_char = getchar();
            if (check_char == '*') {
                break;
            } else {
                printf("Error: Invalid input, please enter a positive integer or * to exit.\n");
                clear_input_buffer();
            }
        } else {
            // 读取到整数,校验是否为正
            if (eleman <= 0) {
                printf("Error: Please enter a positive term number.\n");
                clear_input_buffer();
            } else {
                // 输出对应项数的斐波那契数列
                printf("\n");
                int i, n, e1 = 1, e2 = 1;
                for (i = 1; i <= eleman; i++) {
                    printf("    %d\n", e1);
                    n = e1 + e2;
                    e1 = e2;
                    e2 = n;
                }
                printf("\n");
                break;
            }
        }
    }
}

int main() {
    // 持续运行程序直到输入*
    while (1) {
        calculate_fibonacci_sequence();
        
        // 检查是否因输入*退出函数,终止整个程序
        int c = getchar();
        if (c == '*') {
            clear_input_buffer();
            printf("Program exited.\n");
            break;
        } else {
            // 将非*字符放回输入缓冲区,避免影响下一次读取
            ungetc(c, stdin);
        }
    }
    return 0;
}

关键修改说明

  • 实现持续运行逻辑:main函数通过while(1)循环反复调用斐波那契计算函数,直到检测到*输入才终止程序。
  • 全面输入校验:
    • 利用scanf返回值判断是否成功读取整数:返回0表示输入为非整数(字符串、浮点数等),此时检查是否为*,否则给出错误提示。
    • 单独校验非正整数输入,给出针对性提示。
  • 缓冲区清理:新增clear_input_buffer函数,清除输入缓冲区中残留的非法字符,避免后续读取操作出现异常。
  • 终止指令支持:在读取非整数输入时检查是否为*,触发程序终止流程。

内容的提问来源于stack exchange,提问作者Abdulkadir Temizoğlu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 12:55:21