我正在尝试打印消息并将光标放在此消息的单词或某个位置下,例如:
class Recipe < ApplicationRecord
has_many :taggings
has_many :tags, through: :taggings
after_destroy :remove_tags
private
# I need to pass an individual recipe
def remove_tags
if self.tags.present?
self.tags.each do |tag|
Recipe.tagged_with(tag).length == 1 ? tag.delete : next
# tagged_with() returns recipes with the given tag name
end
end
end
end
我尝试使用两个Error : Type incompatibility, line:column 25:6, in a=b;
^
函数,如果我们使用相同的示例,它看起来像这样:
printf
注意:第二个printf("Error : Type incompatibility, line:column 25:6, in a=b;");
printf(" ^");
中的空格是表格。
但是当我尝试它时,它会在开头显示光标,因为它省略了表格。
我用类型化的表格(printf
)替换了表格,并且它正确地移动但我必须每次测试所需的表格数量,以及我的字符串长度。
我有没有办法(方法/功能)为任何字符串长度做这个而不用每次测试?
提前感谢。
答案 0 :(得分:1)
如下:
void point_cursor(char* error_string, char* expression)
{
char* cursor_ptr = strstr(error_string, expression);
int spaces = cursor_ptr - error_string;
printf("%s\n", error_string);
for (int i = 0; i < spaces; i++)
{
printf(" ");
}
printf("^\n");
}
然后你称之为:
char* error = "Error : Type incompatibility, line:column 25:6, in a=b;";
char* expr = "a=b";
point_cursor(error, expr);
输出将是:
Error : Type incompatibility, line:column 25:6, in a=b;
^