为什么以下代码在输入要放入结构体的数字后进入第二个 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/