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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 10:50:37