CS50习题集1中C语言while循环无法重复请求输入问题求助
CS50 习题集1 C语言输入验证问题
我正在解决CS50的习题集1,用C语言编写代码。现在遇到一个问题:希望当输入的n≥9或n≤0时,程序能重复请求新输入,但当前代码执行到该条件时直接终止。尝试过return n;无效,使用return 0;程序也直接结束,无法重复请求输入。
原代码如下:
#include <stdio.h> #include <cs50.h> int main(void) { int n = get_int("Number: "); while(n>=9 || n<=0) { return 0; } int i; for(i=0;i<n;i++) { int a; for(a=n-1;a>i;a--) { printf(" "); } int y; for(y=0;y<=i;y++) { printf("#"); } printf("\n"); } }
问题分析
你的核心问题出在while循环里的return 0;语句——return会直接终止整个main函数,也就是结束程序,自然无法实现重复请求输入的效果。
修正方案
你需要在输入不符合要求时,重新获取用户输入,而不是终止程序。推荐两种实现方式:
方案一:使用do-while循环
这种循环适合"先执行一次输入,再验证条件"的场景:
#include <stdio.h> #include <cs50.h> int main(void) { int n; // 先获取输入,不符合条件则重复执行输入操作 do { n = get_int("Number: "); } while (n >= 9 || n <= 0); // 金字塔打印逻辑保持不变 for (int i = 0; i < n; i++) { for (int a = n - 1; a > i; a--) { printf(" "); } for (int y = 0; y <= i; y++) { printf("#"); } printf("\n"); } return 0; }
方案二:使用while循环更新输入
在原逻辑基础上,循环内重新获取输入替代终止操作:
#include <stdio.h> #include <cs50.h> int main(void) { int n = get_int("Number: "); // 不符合条件时,提示并重新获取输入 while (n >= 9 || n <= 0) { n = get_int("请输入1-8之间的数字: "); } // 金字塔打印逻辑保持不变 for (int i = 0; i < n; i++) { for (int a = n - 1; a > i; a--) { printf(" "); } for (int y = 0; y <= i; y++) { printf("#"); } printf("\n"); } return 0; }
两种写法都会在输入不符合1<=n<=8时,持续请求用户输入,直到得到合法值后再执行金字塔打印逻辑。
内容的提问来源于stack exchange,提问作者eceligelenkopke
相关产品推荐
相关产品推荐

