如何在C中的特定单词下打印游标,如gcc编译器中的错误/警告

时间:2016-11-29 22:31:01

标签: c formatting printf

我正在尝试打印消息并将光标放在此消息的单词或某个位置下,例如:

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)替换了表格,并且它正确地移动但我必须每次测试所需的表格数量,以及我的字符串长度。

我有没有办法(方法/功能)为任何字符串长度做这个而不用每次测试?

提前感谢。

1 个答案:

答案 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;
                                                   ^