c 语言 vk_return,GetAsyncKeyState(VK_RETURN)遇到

GetAsyncKeyState(VK_RETURN)

在我输入我的信息后,它不回到我的菜单。它突然问我输入另一个信息(这是无止境的)。

我不确定它是否使用GetAsyncKeyState(VK_RETURN)语句,因为每次我尝试放入最后一个信息,即“输入年份”时,它都会返回菜单,但会自动按下Enter在“输入学生”选项上。

#include

#include

#include

#include

#include

#include

using namespace std;

typedef struct{

char fname[24],lname[16],mi,course[16];

int year;

unsigned long ID;

}studtype;

void getStudent(void);

void getHeader();

void readToFile(void);

// FILE * openFile(FILE *);

// void closeFile(FILE *);

// studtype *writeFile(studtype *,FILE *);

int main(void)

{

char* Menu[2];

Menu[0] = "Input Student";

Menu[1] = "Display Student";

int choice;

int pointer = 0;

while(true)

{

system("cls");

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 15);

printf("Main Menu\n\n");

for (int i = 0; i < 2; ++i)

{

if (i == pointer)

{

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 11);

cout << Menu[i] << endl;

}

else

{

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 15);

cout << Menu[i] << endl;

}

}

while(true)

{

if (GetAsyncKeyState(VK_UP) != 0)

{

pointer -= 1;

if (pointer == -1)

{

pointer = 1;

}

break;

}

else if (GetAsyncKeyState(VK_DOWN) != 0)

{

pointer += 1;

if (pointer == 2)

{

pointer = 0;

}

break;

}

else if (GetAsyncKeyState(VK_RETURN) != 0)

{

switch (pointer)

{

case 0:

{

printf("\n\n");

getStudent();

} break;

case 1:

{

printf("\n\n");

getHeader();

readToFile();

Sleep(5000);

} break;

}

break;

}

} Sleep(150);

}

}

void getHeader()

{

printf("%-10s","ID");

printf("%-10s","FirstName");

printf("%-10s","LastName");

printf("%-20s","MiddleInitial");

printf("%-15s","Course");

printf("%-15s","Year");

printf("%-10s","-------");

printf("%-10s","---------");

printf("%-10s","--------");

printf("%-10s","----------");

printf("%-10s","-------");

printf("%-10s","---------");

printf("%10s","-------");

printf("%s"," ");

}

void getStudent(void)

{

studtype stud;

FILE * fp;

if((fp = fopen("sample.txt","a"))!=NULL)

{

system("cls");

printf("Enter Student ID: ");

scanf("%d",&stud.ID);

printf("Enter FirstName: ");

fflush(stdin);

gets(stud.fname);

printf("Enter LastName: ");

fflush(stdin);

gets(stud.lname);

printf("Enter MI: ");

scanf("%c",&stud.mi);

printf("Enter Course: ");

fflush(stdin);

gets(stud.course);

printf("Enter Year: ");

scanf("%d",&stud.year);

fwrite(&stud,sizeof(studtype),1,fp);

fclose(fp);

}

}

void readToFile(void)

{

studtype stud;

FILE * fp;

if((fp = fopen("sample.txt","r"))!=NULL)

{

while(fread(&stud,sizeof(studtype),1,fp))

{

printf("%-10d",stud.ID);

printf("%15s",stud.fname);

printf("%10s",stud.lname);

printf("%10c",stud.mi);

printf("%15s",stud.course);

printf("%10d",stud.year);

printf("%10s","");

}

fclose(fp);

}

}

什么似乎是问题?

+0

您正在使用GetAsyncKeyState()错误,它也可以返回一个非零值,当键是*不* *。它的返回值编码*两条*信息。它只是不适合使用winapi函数。你已经#including conio.h,你可以使用它的_getch()函数。 ReadConsoleInput()是基础的winapi函数。 –

+0

@HansPassant我想知道,我尝试输入最后一个信息后,如何返回到我的菜单?它有点像双击RETURN。 –

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值