【问题标题】:C undeclared variable for pyramid金字塔的C未声明变量
【发布时间】:2020-07-24 08:41:59
【问题描述】:

我正在写这篇文章,因为我已经尝试了一段时间但没有取得任何成功。我将发布我的代码和错误消息(来自 cs50 week1 课程)。

#include <cs50.h>
#include <stdio.h>

int main(void) 
{ 
    do { 
        int h = get_int("Height of your pyramid please\n");   
    } 
    while(h < 1 && h > 8); 
} 
    
    for(int i = 0; i < h; i++) { 
        for(int j = 0; j < h; j++) { 
            printf (" "); 
        } 
            
        for(int k = h; k < h; k--) { 
            printf(" # "); 
        } 
        printf("\n"); 
            
    }

错误信息如下:“mario.c:12:11: error: use of undeclared identifier 'h'

通过“未声明的标识符”,clang 表示您在 mario.c 的第 12 行使用了尚未定义的名称 h。如果您打算将 h 用作变量,请确保通过指定其类型来声明它,并检查变量名称的拼写是否正确。”。此外,代码应该制作一个朝右的金字塔。 谢谢你的帮助! 拉格纳罗尼 PS:如果有什么奇怪的地方看起来很抱歉,请告诉我如何纠正它,我会的。

【问题讨论】:

  • 您在h 循环内声明变量h,这意味着您不能在循环外使用它。只需在循环之前将其声明为int h;
  • 也作为一个 SO 提示,使用代码围栏将文本格式化为代码,只需在代码前后添加一行 ~~~
  • 你的 for 循环在 main() 函数之外。在 do-while 函数之外声明 h 是个好主意。正确的格式是编码的武器

标签: c variables cs50


【解决方案1】:

让我对h问题进行以下更正:

int main(void) 
{ 
    int h; // this is the height of the pyramid
    do { 
        h = get_int("Height of your pyramid please\n");   
    } 
    while(h < 1 && h > 8); 
    
    for(int i = 0; i < h; i++) { 
        for(int j = 0; j < h; j++) { 
            printf (" "); 
        } 
            
        for(int k = h; k < h; k--) { 
            printf(" # "); 
        } 
        printf("\n"); 
            
    }
} 

如您所见,我已确保所有内容都在 main 循环内,并且我已将您的变量声明放置在所有使用它的地方都可以访问的位置。

【讨论】:

  • 谢谢,但我可以问一个后续问题吗?所以我更正了我的代码,但是右侧的金字塔没有显示,而是显示:“clang -ggdb3 -O0 -std=c11 -Wall -Werror -Wextra -Wno-sign-compare -Wno-unused-parameter -Wno-未使用的变量 -Wshadow mario.c -lcrypt -lcs50 -lm -o mario" 我不知道这应该是什么意思......它不会提示我输入高度。
  • 编辑:提示问题,但是金字塔没有显示,但我会尝试像我对提示所做的那样弄清楚。
  • 好的,所以我进一步研究了它,我注意到我的“while”函数不能正常工作,如果 h 超过 8 或低于 1,它应该会不断提示你。另一个问题是金字塔看起来不合适,我得到一个正方形。这是代码:(在下一条消息中,因为它不适合大声笑)
  • #include #include int main(void){ int h; //金字塔高度 do { h = get_int("请你的金字塔高度\n"); } while(h 8); for (int i = 0; i
【解决方案2】:

您的代码存在三个基本问题:

  1. for 循环在main() 函数之外。这在 C 中是不允许的。任何控制流语句都需要在函数内部,而不是在全局范围内。

  2. hmain() 中的do while 循环内的每次迭代中被声明/定义为新的。如果您希望h 在循环外可见,则需要在循环外声明它。

  3. h &lt; 1 &amp;&amp; h &gt; 8do while 循环条件没有意义。它检查h 是否低于1 同时高于8。永远不会出现这种情况,所以结果只是通过循环体一次,这使得循环变得毫无用处。

【讨论】:

    猜你喜欢
    • 2013-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多