我很不幸在vc++ 6中使用conio.h进行大学作业,

我的问题是我的图形设置在屏幕的中央。

例如

gotoxy( getcols()/2, getrows()/2);
printf("Enter something");
scanf( "%d", &something );

现在,如果有人在输入“东西”之前不小心按下了Enter键,则光标将重置为在下一行的屏幕左侧。

iv尝试使用fflush(stdin)和getchar()刷新键盘和BIOS缓冲区,就像我期望的那样,它不起作用!

任何帮助/想法,将不胜感激,
谢谢,
V

最佳答案

成功之路将涉及完成任务要求您做的事情:)特别是,您应该使用conio.h中的一个或多个函数来读取您的输入。 scanf()不是conio.h函数。

因为我很懒,这是一个家庭作业问题,所以我不会为您编写代码。

一种可能性是使用cscanf()而不是scanf()。但这可能(我不知道)回显输入字符,其中包括偶然的Enter键,并不能解决您的问题。

如果是这种情况,我的策略将是使用非回声getch()函数编写一个循环以收集从键盘输入的字符。您可以忽略换行符,直到您拥有至少一个可打印的字符为止,然后接受字符(并将它们存储在字符数组等中),直到获得换行符为止。由于不会回显输入字符,因此我认为光标不会移动。

然后,您可以使用sscanf()从输入缓冲区中扫描输入字符。您需要对输入字符进行计数,以确保您的用户不会溢出缓冲区。同样,在数据损坏的情况下,可能会进行一些错误处理。

编辑:我忘记提及的事情:您在缓冲区中的最后一个输入字符后应跟一个零字符('\0'),以便sscanf()将正确终止。默认情况下,缓冲区可能会充满零,但是有意地在其中放置一个零(例如,当您敲最后一个换行符时)将使您的代码更正确和更健壮。

10-07 23:23