【问题标题】:How to define a variable "N" type in C when N it is an input to C and its also defined by an input function( N will prompt the user for input)当 N 是 C 的输入并且它也由输入函数定义时,如何在 C 中定义变量“N”类型(N 将提示用户输入)
【发布时间】:2020-10-23 06:14:13
【问题描述】:

我还是编程新手,对 C 编程还是非常陌生,所以如果我的问题看起来很荒谬,请原谅我。

我正在学习函数和函数调用,并且我正在尝试跟随讲师正在做的事情,但有一点补充。 导师做了以下事情:

  • 讲师定义了一个函数咳嗽——(void咳嗽(int N))
  • 仅使用一行代码调用 main 中的函数
  • 程序在屏幕上打印出硬编码的咳嗽次数,即咳嗽 (3) 将打印咳嗽 3 次。

我正在尝试:

  • 定义一个函数咳嗽——(void咳嗽(int))
  • 只用一行代码调用main中的函数
  • 程序应在屏幕上打印 N 次咳嗽,但应在程序启动时得到提示,例如“咳嗽多少次?”

我使用的 C(c99) 有一个库 cs50.h(来自在线课程 cs50),它提供了获取整数输入的代码。 经过搜索和尝试,我已经成功完成如下:

包含 cs50 库后 int N = get_int("咳嗽多少次") 咳嗽(N)

还有 咳嗽(get_int(“咳嗽多少次”))

我只是想知道为什么我不能在 C 中成功使用下面的代码而不会出错。为什么不能从函数中生成N?

我得到的错误是---使用了未声明的标识符'N'

void cough(int N);
int main(void)
{
    cough(N);
}

void cough(int N)
{
    N = get_int("How many coughs?\n");
    for (int i = 0; i < N; i++)
    {
        printf("cough\n");
    }
}

感谢您阅读长篇故事并提供指导。

【问题讨论】:

    标签: c function compiler-errors logic cs50


    【解决方案1】:

    我只是想知道为什么我不能在 C 中成功使用下面的代码而不会出错。

    使用未声明的标识符“N”

    因为在

    int main(void)
    {
        cough(N);
    }
    

    N 没有在 main 中定义为局部变量,也不是全局变量,所以无法编译代码

    但应该在程序以提示符启动时获取,例如“咳嗽多少次?”

    所以

    N = get_int("How many coughs?\n");
    

    必须在main中移动

    最后你想要这样的东西:

    void cough(int N);
    int main(void)
    {
        cough(get_int("How many coughs?\n"));
        return 0;
    }
    
    void cough(int N)
    {
        for (int i = 0; i < N; i++)
        {
            printf("cough\n");
        }
    }
    

    注意你的printf 打印一个常量字符串,所以你可以用puts("cough"); 替换它,因为printf 在这种情况下什么都不搜索'%'

    【讨论】:

    • 非常感谢您花时间详细解释和帮助指导。我也很重视使用 puts 而不是 printf 的额外见解,我已经看到它和 scanf 并且经常想知道使用什么,我将从现在开始使用 puts 打印出一个常量。
    【解决方案2】:

    当您用 C 编写程序时,您只能使用之前定义的标识符......或者,当然,当您定义它们时。

    让我们逐行处理您的代码

    void cough(int N);
    

    void 已定义:语言关键字
    cough 此处(暂定)定义
    int 已定义:语言关键字 N 在这里(暂时)定义。这个定义在下一个右括号之前有效,因为它是一个参数定义

    int main(void) {
    

    main 在这里定义

        cough(N);
    

    cough 之前(暂时)定义了,所以没关系:编译器知道它是一个函数,之前的暂定定义和实际定义不能改变它。 N 哎呀!!!之前未定义,不是关键字,编译器因错误而停止:)


    不过,您可以定义 cough() 不带参数

    #include <stdio.h>
    #include "cs50.h"
    
    int cough(void);
    int main(void)
    {
        cough();
    }
    
    void cough(void)
    {
        int N = get_int("How many coughs?\n");
        for (int i = 0; i < N; i++)
        {
            printf("cough\n");
        }
    }
    

    【讨论】:

    • 哇,非常感谢您提供的分步指南。布鲁诺的回答和指导帮助很大,你通过编译器的解释帮助我理解了更多。我非常感谢花时间帮助我了解这个概念。
    • 很高兴我能帮上忙。编码快乐!
    【解决方案3】:

    您需要在main 中定义N(顺便说一下,它完全独立于cough 中的N。例如:

    int main(void)
    {
        int N = 5;
        cough(N);
    {
    

    作为替代方案,您可以使用cough(5) 或将N 定义为全局。

    【讨论】:

      【解决方案4】:

      你可以试试这个,不过我没用get_int()

      void cough(int N);
      int main(void)
      {
          int N = 0;
          scanf( "%d", &N );
          cough(N);
      }
      
      void cough(int N)
      {
          printf("How many coughs?\n");
          for (int i = 0; i < N; i++)
          {
              printf("cough\n");
          }
      }
      

      【讨论】:

      • 非常感谢您花时间解释。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-30
      • 1970-01-01
      • 2020-02-23
      • 1970-01-01
      • 2022-11-21
      • 2013-06-29
      相关资源
      最近更新 更多