我在使用get_string函数时遇到问题

时间:2019-08-09 05:13:41

标签: c cs50

在Windows Vscode上进行了大量试用后,我终于使CS50库工作了。现在,问题是get_string函数无法按以下方式使用:

int main(void)
{
    string s = get_string("Enter string: ");

    // ensure string was read
    if (s == NULL)
    {
        return 1;
    }

    string next = get_string("You just entered %s. Enter a new string: ", s);

    if (next == NULL)
    {
        return 1;
    }

    printf("Your last string was %s\n", s);
}

我写的时候

string name = get_string("Give me a name:");

我得到了错误

In file included from hello.c:1:0:
cs50.c:78:8: note: expected ‘char **’ but argument is of type ‘char *’
 string get_string(va_list *args, const string format, ...)
        ^~~~~~~~~~
hello.c:10:16: error: too few arguments to function ‘get_string’
  string name = get_string("Give me a name:");
                ^~~~~~~~~~
In file included from hello.c:1:0:
cs50.c:78:8: note: declared here
 string get_string(va_list *args, const string format, ...)

这是我的代码。我基本上是在测试功能中不需要的get_string函数。

#include "cs50.c"
#include "cs50.h"
#include <stdio.h>
#include <stdlib.h>

int main()
{

 char str[20] = "#";
 string name = get_string("Give me a name:");
 printf("What height of pyramid \n");
 int user;
 if(scanf("%d", &user))
 {
     for (int i =0; i< 8; i++)
  {
      if(user <= 0 || user > 8 )
      {
          printf("Height: %d \n", user);
          printf("Provide value between 1 and 8 \n");
          scanf("%d", &user);

      }


  }
    printf("\n");
    int i;


    for (i = 1; i <= user; i++) { 
        for(int k = user; k > i; k--){
            putchar(' ');
        }
        int j;
        for (j = 0; j < i; j++) {

            putchar('#');

        }
        putchar('\n');

    }
  return EXIT_FAILURE;
 }

}

我希望写

string s = get_string("Enter string: ");

,并在运行代码时在终端提示。

3 个答案:

答案 0 :(得分:0)

实际上,通过反复试验并不能完全为您提供正确的解决方案。 问题很简单。您应该使用的get_stringcs50.h中的宏。 cs50.c 删除此宏定义,并通过名称get_string定义另一个函数(是的,这很糟糕)。最终结果是,即使在单个文件应用程序中,您也无法#include <cs50.c>使代码正常工作。

您需要做的只是

#include <cs50.h>

并将cs50.c添加为项目中的另一个 翻译单元,即,如果您的主程序是prog.c,则将cs50.c添加为文件文件夹。

答案 1 :(得分:0)

我能够通过包含来自libcs​​50-8.0.3的cs50.h和cs50.c来解决这个问题,这是符合我想要的v8.0.3。

现在一切都很好。

答案 2 :(得分:0)

如果你添加了 cs50 库,即使你得到这个错误,我可以给出这样的建议:

对于linux终端;

"1234"

来源:哈佛大​​学 CS50