为什么以下代码在输入要放入结构体的数字后进入第二个 scanf_s 时会抛出异常。

这绝不代表一个完整的链表实现。

不知道输入值后如何进入下一个 scanf_s?有任何想法吗?

编辑:使用建议的解决方案更新代码,但在第一个 AccessViolationException 之后仍然得到一个 scanf_s
代码:

struct node
{
    char name[20];
    int age;
    float height;
    node *nxt;
};

int FillInLinkedList(node* temp)
{

int result;
temp = new node;

printf("Please enter name of the person");
result = scanf_s("%s", temp->name);

printf("Please enter persons age");
result = scanf_s("%d", &temp->age); // Exception here...

printf("Please enter persons height");
result = scanf_s("%f", &temp->height);

temp->nxt = NULL;
if (result >0)
    return  1;
 else return 0;
}

// calling code

int main(array<System::String ^> ^args)
{
  node temp;

  FillInLinkedList(&temp);

...

最佳答案

你需要

result = scanf_s("%d", &temp->age);


result = scanf_s("%f", &temp->height);

原因是 sscanf(和 friend )需要一个指向输出变量的指针,以便它可以将结果存储在那里。

顺便说一句,你的函数的参数 temp 也有类似的问题。由于您正在更改指针(而不仅仅是它指向的内容),您需要传递一个双指针,以便更改在您的函数之外可见:
int FillInLinkedList(node** temp)

当然,您还必须在函数内部进行必要的更改。

关于windows - scanf_s 抛出异常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2350849/

10-11 00:43