从整个句子去理解。他太伤心了,你应该(或最好)劝说一下他。这样就不难理解不能用(能,会)could have given而必须用ought to(should)have given。
could是可能的意思。should/ought to是应该的意思。所以这句意思是,你应该给他一些劝告。他在那个时候很失落
肯定不能用could。用should句子意思才能说得通。看看情态动词用法
完全可以填,一个事情 用 could have would have should have 都可以用,这没有绝对的不能,用哪个是取决于你侧重于表达什么意思。
看你要表达是你应该,还是说你可以 could have 有两种意思,一种是表示可以,一种是表示推测,就是可能的意思,按语境来分辨。并不是一种意思。
should have 的用意是 建议你之前要好好安慰他一下,
could have 是说 你之前有机会(可能)/能力(条件) 好好安慰一下他的,
但是这里should have 比较好,因为并没指出什么特殊情况,比如你就在他身边,但是你什么都没说,你说could have 比较好,而这里相当于对以前建议一个。
这种题目 就是有问题的因为 他会存在各种情景 你也不是说话人 不知道他具体是倾向于哪个意思, 如果你脑补多了 就觉得另外一种说法更好 实际说话中 按你自己想表达的意思来就行了