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
相关产品推荐
相关产品推荐

