我正在练习C中的结构,所以我试图执行2次此代码和两次计算机崩溃.我的计算机崩溃后,我已经关闭了两次计算机.
编译器是GCC(关于Windows平台上的MinGW).代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct person {
char name[50];
int age;
int document;
};
int main(void){
struct person p1;
printf("Data of the first person\n\n");
printf("age: ");
fflush (stdin);
scanf("%i",p1.age );
printf("Document: ");
fflush(stdin);
scanf("%i",p1.document);
printf("Age is: %i and document is: %i ",p1.age,p1.document);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
真诚的,NIN.
UPDATE ....
坏消息.现在Avast说我创造了一种病毒.因此Avast删除我的exe:
我应该报告是否为误报?
scanf("%i",p1.age );
Run Code Online (Sandbox Code Playgroud)
当你调用时scanf,p1.age是一个没有特定值的整数.因此,您要求scanf在任何特定位置存储您输入的值.这导致崩溃并不奇怪.你要:
scanf("%i", &p1.age );
Run Code Online (Sandbox Code Playgroud)
这告诉scanf读取一个整数并将其存储在地址中p1.age.
令人惊讶的是你的编译器没有给你一个警告.您确定已启用所有警告吗?
当我尝试编译时,我得到了适当的警告:
warning: format ‘%i’ expects argument of type ‘int *’, but argument 2 has type ‘int’ [-Wformat=]
Run Code Online (Sandbox Code Playgroud)
更新:您的防病毒具有阻止具有可疑行为的软件的启发式方法.你的代码有bug,而且你的防病毒软件并不知道它们只是错误而不是试图做一些邪恶的事情.听起来你没有为实验设置一个非常好的环境.让我猜一下 - 你是从Windows管理员帐户做的所有这些.