我很不幸在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()
将正确终止。默认情况下,缓冲区可能会充满零,但是有意地在其中放置一个零(例如,当您敲最后一个换行符时)将使您的代码更正确和更健壮。