将带有 glut 的点击坐标添加到向量链接列表中

2024-05-14

我想创建一个向量链接列表,并在 GLUT 库的帮助下获取点击的位置并将它们附加到链接列表中。

这些是我写的结构。

typedef struct vector{int x;int y;}Vector;
typedef struct VectorList{Vector X; struct VectorList*next; }node_v;

我全局定义了一个 P 向量和 prev 向量的链表。

Vector P;
node_v * prev=NULL;

在鼠标回调函数 _mouse_CB 每次单击鼠标左键时,我想用当前的 x 和 y 值更新 P 向量并将它们附加到链接列表中。

这是代码的那部分。

static void _mouse_CB(int button, int state, int x, int y)
{
    if(state==GLUT_DOWN)
    {
        switch(button)
        {
        case GLUT_LEFT_BUTTON :
            px=x;py=y;
            P.x=x;
            P.y=y;
            prev=VL_new1(P);

            append(&prev,P);
            break;

这里的append函数是我从geeksforgeeks写的,并在最后添加了一个while循环来检查值是否添加正确,但我正在溢出。

void append(node_v** head_ref, Vector A)
{ 
    node_v* new_node = (node_v*) malloc(sizeof(node_v)); 

    node_v *last = *head_ref;  

    new_node->X.x  = A.x; 
      new_node->X.y  = A.y; 
    new_node->next = NULL; 

    if (*head_ref == NULL) 
    { 
       *head_ref = new_node; 
       return; 
    }   
    while (last->next != NULL) 
        last = last->next; 
    last->next = new_node; 
    last = *head_ref;
    while(last){
      printf("%d %d\n", last->X.x,last->X.y);
      last = last->next;
    }
    return;     
} 

为了创建一个节点,我编写了这个函数

node_v* VL_new1(Vector A){
        node_v *new = (node_v*)malloc(sizeof(node_v));
        if(new==NULL){exit(1);}
        else{
            new->X.x  = A.x; 
            new->X.y  = A.y; 
            new->next = NULL;
        }
        return new;
}

每次我运行这个程序并单击出现的窗口时,在终端上附加函数中的 printf 都会输出这个

-732680176 -729092496
0 -1344244448

我应该进行哪些更改才能避免溢出并成功添加当前值?


新节点在函数中创建append:

node_v* new_node = (node_v*) malloc(sizeof(node_v));

指令prev=VL_new1(P);生成一个新的列表头。每次执行代码时,然后prev被设置并且之前的内容prev丢失了。

删除如果:

case GLUT_LEFT_BUTTON :
    px=x;py=y;
    P.x=x;
    P.y=y;
    append(&prev,P);

注意,函数VL_new1可以调用append, 反而:

void append(node_v** head_ref, Vector A)
{ 
    node_v *last = *head_ref;
    node_v* new_node = VL_new1(A); 

    if (*head_ref == NULL) 
    { 
       *head_ref = new_node; 
       return; 
    }

    while (last->next != NULL) 
        last = last->next; 
    last->next = new_node;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将带有 glut 的点击坐标添加到向量链接列表中 的相关文章

  • C++ Singleton 类 getInstance (作为 java)[重复]

    这个问题在这里已经有答案了 可能的重复 谁能给我提供一份 C 中的 Singleton 示例吗 https stackoverflow com questions 270947 can any one provide me a sample
  • 如何指定CMAKE外部项目的编译器?

    我使用ExternalProject Add 包含一个外部项目 我想要的是能够做到 cmake DCMAKE CXX COMPILER
  • 如何在C编程中获取当前时间(以毫秒为单位)[重复]

    这个问题在这里已经有答案了 可能的重复 如何使用 ANSI C 测量以毫秒为单位的时间 https stackoverflow com questions 361363 how to measure time in milliseconds
  • C 中的分段错误

    我需要用 0 填充二维数组 但编译后的程序会出现此错误 怎么了 int main int vert 1001 1001 int hor 1001 1001 int dudiag 1416 1416 int uddiag 1416 1416
  • 函数原型和数组参数

    我正在学习 C 语法 并且已经开始研究数组了 我想问你一个问题 但首先让我回顾一下 这样我就知道我已经弄清楚了 我知道您可以使用以下语法将变量定义为数组 name
  • 优化对绑定到 DataGridView 的 DataTable 的更新

    我的应用程序中有一个显示一些数据的表单 当我第一次显示表单时 我将一些数据加载到 DataTable 中 然后将 DataTable 绑定到 DataGridView 我还启动了一个异步方法来执行一些较慢的数据库查询 当这些慢查询完成时 我
  • 使用 boost::iterator_facade<>

    我有一个链表结构 struct SomeLinkedList const char bar int lots of interesting stuff in here DWORD foo SomeLinkedList pNext 它是现有
  • 整数与双精度算术性能?

    我正在编写一个 C 类来使用整数执行 2D 可分离卷积 以获得比双对应更好的性能 问题是我没有获得真正的性能提升 这是 X 过滤器代码 对于 int 和 double 情况都有效 foreach pixel int value 0 for
  • 为什么测试在 TeamCity 中运行比直接在 NUnit 中运行需要更长的时间?

    我进行了一些 C 性能测试 基本上运行两种不同的方法 并检查一种方法的运行速度是否比另一种方法快得多 当我在 NUnit 本地运行它们时 其中一个测试的运行速度是另一个测试的十倍 因此我有一个 NUnit 测试 它使用Stopwatch检查
  • 让 GCC/Clang 使用 CMOV

    我有一个简单的标记值联合 这些值可以是int64 ts or doubles 我正在对这些联合进行加法 但需要注意的是 如果两个参数都代表int64 t值 那么结果也应该有一个int64 t value 这是代码 include
  • 使用 for 循环创建链表

    这是我的结构 struct ListItem int data struct ListItem next 假设链表的第一个节点的 data 0 我想编写一个 for 循环来创建大小为 5 的链表 但我不知道如何工作 我尝试了以下方法 int
  • 复杂的 C 声明

    我刚刚在互联网上浏览了一些代码 发现了这个 float foo SIZE SIZE 我如何阅读这份声明 是否有一套特定的规则来阅读如此复杂的声明 我有一段时间没做这个了 从 开始foo然后向右走 float foo SIZE SIZE fo
  • 带有 Unicode 字符的主机名在 Windows 8 中有效

    Uri CheckHostName 回报UriHostNameType Unknown到处都是 但在 Windows 8 上 它又回来了UriHostNameType Dns 为什么突然间带有 Unicode 西里尔字符的主机名在 Wind
  • C# Linq 可以做组合数学吗?

    我有这个数据结构 class Product public string Name get set public int Count get set var list new List
  • 如何在 C# 中通过 JavaScript 回调运行 QUnit 测试并获取测试结果?

    在我的几个项目中 我使用 MVC 模式将代码 关注点 分为 3 层 模型层和控制层都在 C 上运行 因此我使用 MSTest 或 NUnit 等测试框架来验证这些层的功能需求 对于视图层 我使用 QUnit 来测试 JavaScript 文
  • Global.asax 错误处理程序或自定义 IHttpModule 错误处理程序未捕获未处理的异常

    我有一个类 DPCal EventMove 的一种方法 我想限制使用角色的访问 我有一个 Global asax cs 错误处理程序和一个自定义 IHttpModule 错误处理程序 旨在捕获未处理的异常 并将它们 Server Trans
  • 在 C++ 中将大型数据向量写入/读取到二进制文件

    我有一个 C 程序 它通过将 ascii 文件中的网格人口数据读取到大型 8640x3432 元素双精度向量中来计算给定半径内的人口 将 ascii 数据读入向量大约需要 30 秒 循环每列和每行 而程序的其余部分只需要几秒钟 我被要求通过
  • MonoGame 中的 ContentLoadException

    我一直在尝试使用 Xamarin Studio 在 MonoGame 中加载纹理 我的代码设置如下 region Using Statements using System using Microsoft Xna Framework usi
  • 如何使用字符串的值将字符串转换为 wstring?

    我是 C 新手 我有这个问题 我有一个名为 DATA DIR 的字符串 需要将其格式化为 wstring string str DATA DIR std wstring temp L s str Visual Studio 告诉我没有与参数
  • 散列 hash_hmac 时,Convert.ToChar(0) 散列结果与 PHP 中的 chr(0) 不同的字符串

    我在 PHP 中有一个字符串 它被转换为字节数组并进行哈希处理 转换为字节数组的字符串如下所示 G 字符 0 便便 我需要 C 中的等效字节数组 这样我才能得到相同的哈希值 编辑 这是完整的问题 生成的哈希值不同 PHP api secre

随机推荐