如何在CS50音乐练习上完成is_rest()函数

时间:2018-02-22 21:29:38

标签: c cs50

我正在进行CS50 pset3音乐练习(这是下面练习的一部分)。我提出了一些问题:

is_rest()

在helpers.c中完成is_rest的实现。回想一下,空行代表我们机器可读格式的休止符。并回想一下,synthesize将调用此函数以确定用户输入的其中一行是否确实为空。

空行是什么意思?要回答这个问题,首先要查看cs50.h本身,其中记录了get_string:

https://github.com/cs50/libcs50/blob/develop/src/cs50.h

PS:我查了链接但找不到/明白了。

如果用户只是按Enter键,那么get_string上面的注释会说该函数会返回,从而仅输入“行结尾”(即\ n)?

当is_rest随后传递了这样一个字符串时,s,它应该如何识别(不,你!)?

我的问题是:

为什么代码不能正常工作呢?

// Determines whether a string represents a rest
 bool is_rest(string s)
 {

    if (s == "")
    {
        return true;
    }
    return false;
}

但是这个很明显:

bool is_rest(string s)
{
    if(s[0] == '\0')
    {
       return true;
    }
    return false;
}

两种情况下使用的方法之间有什么区别?

另一方面,有人可以解释一下""'\0'

之间的区别吗?

1 个答案:

答案 0 :(得分:1)

更新

如@Mark Benningfield所述,string只是char *的别名。在这种情况下,您无法直接比较它,但您需要使用strcmp()函数。

表达式s==""会比较s是否指向""之类的相同地址,但如果s具有与""相同的内容则不会。

另一方面,表达式s[0]=='\0'您正在访问字符串s的第一个字符并测试是否包含\0

因为第二个表达式是正确的,而第一个表达式没有。