首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GetAsyncKeyState(VK_RETURN)冲突

GetAsyncKeyState(VK_RETURN)冲突
EN

Stack Overflow用户
提问于 2014-07-05 14:48:20
回答 1查看 1.7K关注 0票数 0

我正在试着做一个滚动菜单。我的问题是

代码语言:javascript
复制
GetAsyncKeyState(VK_RETURN)

在我输入我的信息后,它不会回到我的菜单。它突然要求我输入另一个信息(没完没了)。

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

代码语言:javascript
复制
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#include<windows.h>
#include<iostream>

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);
  }


 }

什么地方出问题了?

EN

回答 1

Stack Overflow用户

发布于 2014-07-05 15:02:18

通常,混合C++风格的流输入和输出、C风格的I/O、conio风格的键盘I/O和系统调用屏幕clr不是一个好主意。四个不同的东西不能保证在一起玩得很好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24583802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档