这是我为有用的休息活动制作的自助计划。在它结束时需要输入一个数字,然后按“回车”重新启动。我宁愿只输入任何东西,或任何数字。
#include <stdio.h>
#include <stdlib.h>
main()
{
int i;
srand((unsigned)time(NULL));
i = rand();
int k;
k = (int)i%22;
printf("\n\n");
switch(k){
case 0: printf("%\t Weather"); printf(" weather"); break;
case 1: printf("\t Hand exercises ok"); break;
case 2: printf("\t BR break"); break;
// etc etc
case 15: printf("\t ~~ DOODLE ON PAPER ## "); break;
case 16: printf("\t Practice Mental Math "); break;
case 17: printf(" \tgo to SNOPES.com\t"); break;
case 18: printf("\t Browse JAVA API"); break;
case 19: printf("\t Left handed writing"); break;
case 20: printf("\tGo outside OUTSIDE\t"); break;
case 21: printf("\tCall M&K\t"); break;
case 22: printf("TRASH CAN BBALL\t"); break;
}
printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
long g;
scanf("%d", &g);
if(g >0){
system("cls");
main();
}
system("pause");
}
我将其用作简单的Windows应用程序。如果还有其他问题/问题我完全容易受到批评,因为我还是C的新手。我很感激任何提示或建议。
答案 0 :(得分:4)
如果您有权访问conio
库,则可以使用kbhit()
来获取按键:
#include <conio.h>
int main(void) {
while (1) {
/* ... */
if(kbhit())
{
break;
}
}
}
答案 1 :(得分:1)
main是一个与其他任何功能一样的功能。除了C Runtime的启动功能(通常称为&#39; start()&#39;设置参数并调用它时,没有什么特别之处。坚持。
特别是在您不关心argc / argv的情况下。
无论如何 - 你真正的问题是stdin默认是面向行的 - 所以任何getc / getchar / scanf都会被缓冲,直到回车。有多种方法可以根据操作系统撤消此操作。
setvbuf()和朋友可以更改缓冲,但它可能不起作用,具体取决于您的操作系统,因为系统的基础文件句柄可能会保持缓冲。
某些操作系统还有其他功能,如kbhit(); (不是ansi)等。对不起,这不是一个可靠的答案 - 你的操作系统是什么?
答案 2 :(得分:1)
首先,您不应该在代码中的任何位置调用main
。如果你想重启,只需编写一个循环,直到终止条件。我不记得是否根据标准递归调用main
是有效的,但即使它是,你也可能因为不受控制的递归而崩溃。
如果你想允许空条目(只有ENTER键)来终止输入,你可以使用fgets
来获取一行(空或不空),然后评估它。
我总是将人们指向my robust user input function,如果你使用它,你可以简单地编写类似的代码:
// Force initial entry into loop
int rc = RC_NO_INPUT;
char buff[] = {`x', '\0`};
:
// Run loop until empty input.
while ((rc == OK) && (*buff != '\0')) {
// Do whatever you need to do here.
// Get input, 'while' loop will check it.
rc = getLine ("ENTER to exit, anything else to continue: ",
buff, sizeof (buff));
}